例如,假设我有一个 StackExchange 类。它会有像
PostQuestion
、Search
和 AnswerQuestion
这样的方法。现在,如果我想手动计算我的声望以确保 StackOverflow 没有欺骗我,我会实现类似以下的内容:
int rep=0;
foreach(var post in StackExchangeInstance.MyPosts)
{
rep+=post.RepEarned;
}
我可以给StackExchange类添加一个方法,但它不需要修改任何内部逻辑,并且只在程序中的一两个其他位置使用。
现在想象一下,如果你有10或20个这样特定的助手方法。在某些情况下非常有用,但肯定不适用于一般情况。我的想法是改变类似下面的内容:
public static RepCalcHelpers
{
public static int CalcRep(StackExchange inst){ ... }
}
转换成类似以下内容:
namespace Mynamespace.Extensions.RepCalculations
{
public static RepCalcExtensions
{
public static int CalcRep(this Stackexchange inst){...}
}
}
注意命名空间。我建议使用它来在特定场景中分组扩展方法,例如“RepCalculations”,“Statistics”等。
我尝试搜索是否听说过这种模式,但没有找到任何关于除了无法修改的类之外使用扩展方法的证据。
这种“模式”有什么不足之处?我应该坚持继承或组合,还是只需使用一个好的静态帮助器类?