我第一次看到一位同事在实现对象池时这样做。他将要合并的类作为参数传递给通用基类。这个基类列出了池化代码。
奇怪的是基类会知道它的孩子。在每个正常情况下,这都被认为是不好的做法。但是在这种情况下,父级只是避免编写重复代码的技术解决方案。任何其他代码都不会引用基类。
这种结构的一个缺点是它“烧毁了基类”。您不能在层次结构的中间引入通用基类。这个问题可能不在主题范围内。
下面是一个可以想象的例子:
public abstract class Singleton<T> where T : class
{
public static T Instance { get; private set; }
public Singleton()
{
if (Instance != null)
throw new Exception("Singleton instance already created.");
Instance = (T) (object) this;
}
}
public class MyClass : Singleton<MyClass>
{
}
改进的代码:
public abstract class Singleton<T> where T : Singleton<T>
{
public static T Instance { get; private set; }
public Singleton()
{
if (Instance != null)
throw new Exception("Singleton instance already created.");
Instance = (T) this;
}
}
public class MyClass : Singleton<MyClass>
{
}