Подтвердить что ты не робот

Разница между DeclaringType и ReflectedType

Может ли кто-нибудь рассказать разницу между этими двумя свойствами?

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

Являются ли они такими же и могут использоваться взаимозаменяемо?

4b9b3361

Ответ 1

Они не совсем то же самое.

  • 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