1

あなたが持っていて、それが+ という名前の A のオーバーライドメソッドから継承しているabstract base class Aと 想像してくださいabstract class BAfoo()

さらに、次のものconcrete class Cを継承していますB

Cオーバーライドされたメソッドfooが継承されています。
ここmethod fooで、リフレクションを使用して、クラス プロパティ全体を反復することを検討してください。

問題は次のとおりです。ランチがいつ行われるか、プロパティまたはプロパティC.foo()でリフレクションが行われますか? レベルからのみプロパティで実行する必要があります。C ClassB class
C

4

2 に答える 2

1

参照BindingFlags.DeclaredOnly:

public override void Foo() {
    PropertyInfo[] piAry = GetType().GetProperties(BindingFlags.Public | BindingFlags.DeclaredOnly);
}
于 2013-08-05T20:30:04.413 に答える
0

あなたのクラスAがこれに似ているとしましょう。

abstract class A 
{
    public string PropertyA { get; set; }

    public abstract List<PropertyInfo> Foo();
}

クラスBがこのクラスから継承し、Foo()メソッドをオーバーライドすると、次の定義のようになります。

abstract class B : A
{
    public string PropertyB { get; set; }

    public override List<PropertyInfo> Foo()
    {
        return GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
                        .ToList();
    }
}

また、最後のクラス、つまり唯一の具体的なクラスであるCは、次のように単純に定義されます。

class C : B
{
    public string PropertyC { get; set; }
}

このソリューションをテストし、返されるプロパティがPropertyCだけであることを確認するには、次のコード行を実行する必要があります。

class Program
{
    static void Main()
    {
        new C().Foo().ForEach(x => Console.WriteLine(x.Name));

        Console.Read();
    }
}
于 2013-08-05T21:03:43.330 に答える