1
class A
{
    public string proprt1 { get; set; }
    public string proprt2 { get; set; }

    public A(string p1,string p2)
    {
        proprt1 = p1;
        proprt2 = p2;
    }
}

class B : A
{
    public B(string p1,string p2):base(p1,p2)
    {
    }
}

class Q
{
    public B b = new B("a","b");
}

我想知道 Q 类(即 B 类)的成员是否通过反射与 A 类兼容

private void someMethod()
{
    Q q = new Q();
    Type type = q.GetType();

    foreach (FieldInfo t in type.GetFields())
    {
        //I am stuck here
        //if (t.GetType() is A)
        //{}
    }
}

然后我想遍历 B.. 的继承属性

我该怎么做呢?我是反思的新手...

4

1 回答 1

1

这适用于我的测试应用程序。

static void Main(string[] args) {
    Q q = new Q();
    Type type = q.GetType();

    Type aType = typeof(A);

    foreach (var fi in type.GetFields()) {
        object fieldValue = fi.GetValue(q);
        var fieldType = fi.FieldType;
        while (fieldType != aType && fieldType != null) {
            fieldType = fieldType.BaseType;
        }
        if (fieldType == aType) {
            foreach (var pi in fieldType.GetProperties()) {
                Console.WriteLine("Property {0} = {1}", pi.Name, pi.GetValue(fieldValue, null));
            }
        }
        Console.WriteLine();
    }

    Console.ReadLine();
}
于 2012-08-09T11:22:08.943 回答