Прочитать на английском

Поделиться через


MemberInfo.DeclaringType Свойство

Определение

Получает класс, объявляющий этот член.

public abstract Type DeclaringType { get; }
public abstract Type? DeclaringType { get; }

Значение свойства

Объект Type для класса, объявляющего данный член.

Реализации

Примеры

В следующем примере определяется интерфейс IValueс одним членом GetValue. Он также определяет четыре класса: A, базовый класс, реализующий IValue интерфейс; B, который наследует A от и скрывает свою реализацию GetValue от реализации базового класса; C, который просто наследует от A; и D, который наследует от A и переопределяет его GetValue метод. Затем в примере извлекается MemberInfo объект для каждого члена типа (включая элементы, унаследованные от Object) и отображается значение его DeclaringType свойства.

using System;
using System.Reflection;

interface IValue
{
   int GetValue() ;
};

class A : IValue
{
   public virtual int GetValue()
   {
      return 0;
   }
};

class B : A
{
   public new int GetValue()
   {
      return 0;
   }
};

class C : A
{ };

class D : A
{
   public override int GetValue()
   {
      return 0;
   }
}

public class Example
{
   public static void Main()
   {
      // Get members of IValue interface.
      ShowMembersAndDeclaringTypes(typeof(IValue));
      Console.WriteLine();
      ShowMembersAndDeclaringTypes(typeof(A));
      Console.WriteLine();
      ShowMembersAndDeclaringTypes(typeof(B));
      Console.WriteLine();
      ShowMembersAndDeclaringTypes(typeof(C));
      Console.WriteLine();
      ShowMembersAndDeclaringTypes(typeof(D));
      Console.WriteLine();
   }

   private static void ShowMembersAndDeclaringTypes(Type t)
   {
      MemberInfo[] members = t.GetMembers();
      Console.WriteLine("{0} Members: ", t.Name);
      foreach (var member in members)
         Console.WriteLine("   {0}, Declaring type: {1}",
                           member.Name, member.DeclaringType.Name);
   }
}
// The example displays the following output:
//       IValue Members:
//          GetValue, Declaring type: IValue
//
//       A Members:
//          GetValue, Declaring type: A
//          ToString, Declaring type: Object
//          Equals, Declaring type: Object
//          GetHashCode, Declaring type: Object
//          GetType, Declaring type: Object
//          .ctor, Declaring type: A
//
//       B Members:
//          GetValue, Declaring type: B
//          GetValue, Declaring type: A
//          ToString, Declaring type: Object
//          Equals, Declaring type: Object
//          GetHashCode, Declaring type: Object
//          GetType, Declaring type: Object
//          .ctor, Declaring type: B
//
//       C Members:
//          GetValue, Declaring type: A
//          ToString, Declaring type: Object
//          Equals, Declaring type: Object
//          GetHashCode, Declaring type: Object
//          GetType, Declaring type: Object
//          .ctor, Declaring type: C
//
//       D Members:
//          GetValue, Declaring type: D
//          ToString, Declaring type: Object
//          Equals, Declaring type: Object
//          GetHashCode, Declaring type: Object
//          GetType, Declaring type: Object
//          .ctor, Declaring type: D

Обратите внимание, что декларируемым типом является , который B включает два GetValue метода, один объявленный A и один за B, а объявляющий тип D.GetValueD.AA.GetValue

Примечание

DeclaringType возвращает только имена элементов и имена их объявляющих типов. Чтобы вернуть имена элементов с их прототипами, вызовите .MemberInfo.ToString

Комментарии

Свойство DeclaringType извлекает ссылку Type на объект для типа, объявляющего этот элемент. Элемент типа объявляется типом или наследуется от базового типа, поэтому Type объект, возвращаемый свойством DeclaringType , может не совпадать Type с объектом, используемым для получения текущего MemberInfo объекта.

  • Если объект, Type из которого был получен этот MemberInfo объект, не объявил этот элемент, DeclaringType свойство будет представлять один из его базовых типов.

  • MemberInfo Если объект является глобальным элементом (т. е. если он был получен из Module.GetMethods метода , который возвращает глобальные методы в модуле), возвращаемый DeclaringType будет иметь значение null.

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0