以下範圍內獲得酒店的私人二傳手是我的代碼:繼承
class Foo
{
public string Bar { get; private set; }
}
和
var prop = typeof(Foo).GetProperty("Bar");
if (prop != null)
{
// The property exists
var setter = prop.GetSetMethod(true);
if (setter != null)
{
// There's a setter
Console.WriteLine(setter.IsPublic);
}
}
是的,你可以想像,這個工程完全正確的。但是當談到一個繼承的東西是不同的:
class Foo
{
public string Bar { get; private set; }
}
class A : Foo
{
}
當然
我改變了這一行:
var prop = typeof(Foo).GetProperty("Bar");
到
var prop = typeof(A).GetProperty("Bar");
然後,二傳手到達空和控制檯什麼也不印!
所以...爲什麼?
順便說一句,是否有一些解決方法,使這種情況發生或完全另一種方式?
任何幫助,將不勝感激。謝謝。
也許你需要在這裏遞歸。層次結構可以是任何可能的。 – pinopino
否,除非在層次結構的某個級別使用'new'運算符,否則在爲'Bar'屬性調用'DeclaringType'時總是要獲得'typeof(Foo)'。其實即使你使用'new',它也可能起作用。 –
我寫了一些代碼來證明,是的你是對的。但是,當我使用'new'運算符時,DeclaringType不再是typeof(Foo),它的typeof(A),下面是我的代碼(只是層次結構):'class Foo {string} ;私人設置; } } class A:Foo { public new string Bar {get;私人設置; } } B類:A { } – pinopino