0

抽象基本クラスがあるとします。

abstract class abstractBaseClass {
    public abstractBaseClass(object argument);

    public abstractBaseClass instanceMethod() {
         //call the constructor of the concrete class here.
    }
}

そして、あなたは基本クラスを持っています:

class baseClass {
    public baseClass(object argument) : abstractBaseClass(object argument)
}

インスタンスメソッドをオンにしている場合abstractBaseClass、リフレクションに頼らずにインスタンスメソッド内でその具象クラスのコンストラクターを呼び出す方法はありますか?

concreteBaseClass(object)特定の具象基本クラスに署名を持つコンストラクターが少なくとも 1 つあると想定するのが妥当であるように思われます。

4

2 に答える 2

3

abstractBaseClass にインスタンス メソッドがある場合、その具体的なクラスのコンストラクターを呼び出す方法はありますか

実際、あなたはすでにそれを行っています。Abstractクラスの派生物でなければ、クラスを初期化できません。

abstractBaseClass  abs  = new baseClass();

ここでの実際のオブジェクト タイプはbaseClassであるため、ctor慣例により の が呼び出されます。

編集

抽象参照 (Sevy がコメントで言及しているもの) 内でホストされる *新しい * 実際のオブジェクトを構築することを意味する場合は、この時点でオーバーライド パターンを使用することをお勧めします。このようなもの:

abstract class abstractBaseClass {
    public abstract abstractBaseClass(object argument);
    public abstract abstractBaseClass CreateMe();
}


class baseClass : abstractBaseClass
{
   ...
   public override abstractBaseClass CreateMe(){
      return new baseClass();
   }
}

使用後

abstractBaseClass  newAbs = abs.CreateMe();

このようなもの、ただのアイデアです。ニーズに合った実際の具体的な実装を自分で把握する必要があります。

于 2012-11-27T18:03:42.820 に答える
0

あなたが意味するなら、「私はただ中に電話をかけるnew baseClass()ことabstractBaseClassができます、そしてそうです、あなたはそうすることができます。

「どのクラスが自分から継承し、新しいクラスを継承するかを動的に把握できますか」という意味の場合は、リフレクションを使用せずに、いいえ。自分から継承しているタイプが複数あるかどうかを知る方法はありません。

ちなみに、これはかなり奇妙なシナリオであり、OOPの多くのベストプラクティスに違反しているように聞こえます。おそらく、オブジェクトを作成するためのファクトリクラスを作成したほうがよいでしょうか。

于 2012-11-27T18:10:49.600 に答える