我最近一直在玩弄使用扩展方法在我控制的类上实现帮助实用程序的想法(即,在同一个程序中并且我可以修改)。其背后的基本原理是,很多时候,这些辅助实用程序用于非常特定的场景,并且不需要访问类的内部值。
例如,假设我有一个 StackExchange 类。它会有类似PostQuestion
andSearch
和的方法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”等。
我已经尝试搜索是否听说过这种类型的模式,并且没有发现任何扩展方法被用于任何东西的证据,除了你不能修改的类。
这种“模式”有哪些不足之处?我应该坚持继承或组合,还是只是一个很好的静态帮助类?