有谁可以告诉这两个属性之间的区别?
DeclaringType
和ReflectedType
考虑代码是:
public class TestClass
{
public static void TestMethod()
{
Console.WriteLine("Method in Class", MethodBase.GetCurrentMethod().DeclaringType.Name);
Console.WriteLine("Method in Class", MethodBase.GetCurrentMethod().ReflectedType.Name);
}
}
这些是否可以互换使用?
答案 0 :(得分:50)
他们并不完全一样。
DeclaringType
返回声明方法的类型。ReflectedType
返回用于检索方法的Type
对象。这是一个演示:
MemberInfo m1 = typeof(Base).GetMethod("Method");
MemberInfo m2 = typeof(Derived).GetMethod("Method");
Console.WriteLine(m1.DeclaringType); //Base
Console.WriteLine(m1.ReflectedType); //Base
Console.WriteLine(m2.DeclaringType); //Base
Console.WriteLine(m2.ReflectedType); //Derived
public class Base
{
public void Method() {}
}
public class Derived : Base { }
注意到最后一行打印Derived
而不是Base
。这是因为,即使在Method
上Base
宣布,我们也使用Derived
来获取MemberInfo
对象。
来源:MSDN