Question Différence entre DeclaringType et ReflectedType


Quelqu'un pourrait-il s'il vous plaît dire la différence entre ces 2 propriétés?

DeclaringType et ReflectedType

Considérez le code est:

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

Sont-ils les mêmes et peuvent être utilisés indifféremment?


33
2018-02-19 14:56


origine


Réponses:


Ils ne sont pas exactement les mêmes.

  • DeclaringType renvoie le type qui déclare la méthode.
  • ReflectedType renvoie le Type objet utilisé pour récupérer la méthode.

Voici une démo:

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 { }

Remarqué comment la dernière ligne imprimée Derived au lieu de Base. C'est parce que, même si Method est déclaré sur Base, Nous avons utilisé Derived pour obtenir le MemberInfo objet.

La source: MSDN


48
2018-02-19 15:02