簡體   English   中英

從基類繼承重寫的方法

[英]Inheriting an overriden method from base class

假設您有一個abstract base class A ,也有abstract base class A繼承自A +名為foo()重寫方法的abstract class B

另外,您有從B繼承的concrete class C

C具有繼承的重寫方法foo
現在考慮method foo使用反射,並遍歷所有類屬性。

問題是:當午餐C.foo() ,將在C Class屬性還是B class屬性上進行反射?
我只需要在C級的屬性上完成此操作。

參見BindingFlags.DeclaredOnly

public override void Foo() {
    PropertyInfo[] piAry = GetType().GetProperties(BindingFlags.Public | BindingFlags.DeclaredOnly);
}

讓我們假設您的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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM