C# 有没有办法找到反射字段定义的实际类,或者找到子对象的公共基类?

C# 有没有办法找到反射字段定义的实际类,或者找到子对象的公共基类?,c#,inheritance,reflection,polymorphism,C#,Inheritance,Reflection,Polymorphism,我有一个在基类中定义的字段,当我在子对象上使用反射时,我想检索实际定义该字段的基类。在C#.NET4.0中有没有办法做到这一点 或者,如果给定两个不同的子类,是否有方法动态查找公共基类?属性FieldInfo。DeclaringType应指向实际定义字段的类型 这实际上来自MemberInfo,因此这也适用于属性、方法等 关于第二个问题。这是未经测试的,但应在以下情况下起作用: public Type GetSharedBaseType(Type a, Type b) { Type te

我有一个在基类中定义的字段,当我在子对象上使用反射时,我想检索实际定义该字段的基类。在C#.NET4.0中有没有办法做到这一点


或者,如果给定两个不同的子类,是否有方法动态查找公共基类?

属性
FieldInfo。DeclaringType
应指向实际定义字段的类型

这实际上来自
MemberInfo
,因此这也适用于属性、方法等

关于第二个问题。这是未经测试的,但应在以下情况下起作用:

public Type GetSharedBaseType(Type a, Type b)
{
    Type tempA = a;
    Type tempB = b;

    while (tempA != null)
    {
        while (tempB != null)
        {
            if (tempA == tempB)
                return tempA;

            tempB = tempB.BaseType;
        }

        tempA = tempA.BaseType;
        tempB = b;
    }

    return null;
}

要查找对象所属的基类,请尝试此

obj.GetType().DeclaringType

要确定两个对象是否属于同一基本类型,可以执行以下操作

//haven't compiled the code.. you can get the basic idea. Note that `System.Object` will always be the base class for every .Net Object
bool HaveSameBase(Object a, Object b)
{
    Type t = a.GetType();
    List<Type> aTypeList = new List<Type>();
    while(t.BaseType != System.Object)
        {
        aTypeList.Add(t.BaseType);
        t = t.BaseType;
        }

    Type s = b.GetType();
        while(s.BaseType != System.Object)
        {
        if(aTypeList.Any(item => item.Equals(s.BaseType)
             return true;
        s = s.BaseType;
        }

    return false;

}
//尚未编译代码。。你可以得到基本的想法。请注意,`System.Object`将始终是每个.Net对象的基类
布尔哈维萨米贝斯(对象a、对象b)
{
类型t=a.GetType();
List aTypeList=新列表();
while(t.BaseType!=System.Object)
{
aTypeList.Add(t.BaseType);
t=t.BaseType;
}
类型s=b.GetType();
while(s.BaseType!=System.Object)
{
if(aTypeList.Any)(item=>item.Equals(s.BaseType)
返回true;
s=s.BaseType;
}
返回false;
}

谢谢,我不知道我怎么会错过了
DeclaringType
属性。