[英]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.