有没有办法找到定义反射字段的实际类或查找子对象的公共基类



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

或者,有没有办法在给定 2 个不同的子类的情况下动态查找公共基类?

属性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;
}

相关内容

  • 没有找到相关文章

最新更新