內獲取的所有基本屬性聲明考慮這一組有趣的類型:類層次結構
class A { public virtual int MyProperty { get; set; } }
class B : A { public override int MyProperty { get; set; } }
class C : B { public new virtual int MyProperty { get; set; } }
class D : C { public override int MyProperty { get; set; } }
class E : D { public new int MyProperty { get; set; } }
我在這裏看到三個不同的性質,有五個實現隱藏或覆蓋對方。
我試圖讓一組屬性聲明爲E
類型:
A.MyProperty
C.MyProperty
E.MyProperty
但我下面的代碼給我的一套物業實現:
A.MyProperty
B.MyProperty
C.MyProperty
D.MyProperty
E.MyProperty
什麼我需要做什麼來獲得財產聲明?
或者B.MyProperty
對於E
的任何實例都會返回除A.MyProperty
以外的值嗎?
如果我的方法朝着錯誤的方向前進:如何獲取某個類型的所有屬性成員,包括隱藏的屬性,但不包括那些永遠不會具有不同值的屬性?
void GetProperties(Type type)
{
if (type.BaseType != null)
{
GetProperties(type.BaseType);
}
foreach (var item in type.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public))
{
Console.WriteLine("{0}.{1}", type.Name, item.Name);
}
}
期望的產出:
typeof(A) typeof(B) typeof(C) typeof(D) typeof(E) ------------ ------------ ------------ ------------ ------------ A.MyProperty A.MyProperty A.MyProperty A.MyProperty A.MyProperty C.MyProperty C.MyProperty C.MyProperty E.MyProperty
我相信這是我第一次見到'新的虛擬。'花了我一秒來了解它的意圖。 – Ani 2010-09-21 16:54:40
我花了一段時間在反射物體上摸索如何做到這一點。我認爲,一旦你找出如何用這些反射對象來表達它,這個問題會變得更加容易。找出它之後,我將這個問題重新解釋爲「列出指定類的所有基本屬性聲明」。 – 2010-09-21 17:45:34