我有一个抽象类 A,我在其中派生了类 B 和 C。类 A 提供了一个抽象方法 DoJOB(),它由两个派生类实现。
有一个类 X,里面有方法,需要调用 DoJOB()。X 类可能不包含任何代码,如 B.DoJOB() 或 C.DoJOB()。
例子:
public class X
{
private A foo;
public X(A concrete)
{
foo = concrete;
}
public FunnyMethod()
{
foo.DoJOB();
}
}
在实例化类 XI 时要决定必须使用哪个派生类(B 或 C)。我考虑过使用 X 的构造函数传递 B 或 C 的实例。
X kewl = new X(new C());
kewl.FunnyMethod(); //calls C.DoJOB()
kewl = new X(new B());
kewl.FunnyMethod(); // calls B.DoJOB()
我的测试表明,使用参数 A 声明方法不起作用。我错过了什么吗?我怎样才能正确地实现这一点?
(A是抽象的,不能实例化)
编辑: 对不起,我忘记了。
A 类是一个通用的抽象单例:
abstract public class A<T> where T : A<T>
{
....
}
public sealed class B : A<B>
{
.....
}
public sealed class C : A<C>
{
.....
}
在标题“将通用单例作为抽象类的解决方案”下