4

特定の署名を持つコンストラクターを見つけようとしています。このコンストラクターは現在の型には存在しませんが、その親には存在します。説明する:

public class Base
{
    public Base()
    {

    }

    public Base(string a1, string a2, string a3)
    {
        ...
    }
}

public class Child : Base
{

}

問題は、次のようにしようとしても.ctor、文字列引数を使用してを見つけることができないように見えることです。.GetConstructor

typeof(Child).GetConstructor(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance, null, new Type[] { typeof(string), typeof(string), typeof(string) }, null);

で置き換えるtypeof(Child)typeof(Base)、当然のことながら機能します。

親コンストラクターの検索に関して欠けているものはありますか?

4

3 に答える 3

4

コンストラクターは継承されないため、FlattenHierarchy.

それを見つけるには、子をループする必要があります。

于 2012-09-18T09:06:38.823 に答える
2

Child クラスには、探しているコンストラクターがありません。あなたは書くことができません:

Child c = new Child("a", "b", "c");

したがって、指定された型のインスタンス化に使用できないコンストラクターを探すのは無意味です。

Child クラスが持っているのは、デフォルトのコンストラクターだけです。

Child c = new Child();

Baseクラスからデフォルトのコンストラクターを削除するChildと、探しているコンストラクターがクラスに含まれます。

于 2012-09-18T09:09:05.287 に答える
1

電話してみる

var child = new Child("1", "2", "3")

そして、そのコンストラクターが で利用できない理由がわかりますChild

于 2012-09-18T09:09:54.343 に答える