DeclaringType和ReflectedType之间的区别

时间:2014-02-19 14:56:42

标签: c# .net-4.0

有谁可以告诉这两个属性之间的区别?

DeclaringTypeReflectedType

考虑代码是:

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);
    }
}

这些是否可以互换使用?

1 个答案:

答案 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。这是因为,即使在MethodBase 宣布,我们也使用Derived来获取MemberInfo对象。

来源:MSDN