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