クラス B と C を派生させた抽象クラス A があります。クラス A は、両方の派生クラスによって実装される抽象メソッド DoJOB() を提供します。
内部に DoJOB() を呼び出す必要があるメソッドを持つクラス X があります。クラス 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 は抽象的で、インスタンス化できません)
編集: 申し訳ありませんが、sthを忘れました。
クラス A は一般的な抽象シングルトンです。
abstract public class A<T> where T : A<T>
{
....
}
public sealed class B : A<B>
{
.....
}
public sealed class C : A<C>
{
.....
}
例を参照してください: http://www.c-sharpcorner.com/UploadFile/snorrebaard/GenericSingleton11172008110419AM/GenericSingleton.aspx
見出しの下に「汎用シングルトンを抽象クラスとして使用するソリューション」