【发布时间】:2011-06-04 23:37:36
【问题描述】:
我有一个抽象类 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();
}
}
在实例化类 X 时,我想决定必须使用哪个派生类(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>
{
.....
}
在标题“将通用单例作为抽象类的解决方案”下
【问题讨论】:
-
你从中得到了什么错误?编译错误?对我来说似乎很好......
-
您需要更具体地了解“不工作”的含义。
标签: c# singleton abstract-class derived-class