内获取的所有基本属性声明考虑这一组有趣的类型:类层次结构
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