Type.GetProperties Type.GetProperties Type.GetProperties Type.GetProperties Method

Определение

Возвращает свойства текущего объекта Type. Gets the properties of the current Type.

Перегрузки

GetProperties() GetProperties() GetProperties() GetProperties()

Возвращает все открытые свойства текущего объекта Type. Returns all the public properties of the current Type.

GetProperties(BindingFlags) GetProperties(BindingFlags) GetProperties(BindingFlags) GetProperties(BindingFlags)

При переопределении в производном классе ищет свойства текущего объекта Type, используя указанные ограничения привязки. When overridden in a derived class, searches for the properties of the current Type, using the specified binding constraints.

GetProperties() GetProperties() GetProperties() GetProperties()

Возвращает все открытые свойства текущего объекта Type. Returns all the public properties of the current Type.

public:
 virtual cli::array <System::Reflection::PropertyInfo ^> ^ GetProperties();
public System.Reflection.PropertyInfo[] GetProperties ();
abstract member GetProperties : unit -> System.Reflection.PropertyInfo[]
override this.GetProperties : unit -> System.Reflection.PropertyInfo[]
Public Function GetProperties () As PropertyInfo()
Возвраты

Массив объектов PropertyInfo, представляющий все открытые свойства текущего типа Type. An array of PropertyInfo objects representing all public properties of the current Type. - или - -or- Пустой массив типа PropertyInfo, если у текущего типа Type нет открытых свойств. An empty array of type PropertyInfo, if the current Type does not have public properties.

Реализации

Примеры

В следующем примере иллюстрируется использование метода GetProperties.The following example demonstrates the use of the GetProperties method.

array<PropertyInfo^>^myPropertyInfo;

// Get the properties of 'Type' class object.
myPropertyInfo = Type::GetType( "System.Type" )->GetProperties();
Console::WriteLine( "Properties of System.Type are:" );
for ( int i = 0; i < myPropertyInfo->Length; i++ )
{
   Console::WriteLine( myPropertyInfo[ i ] );

}
PropertyInfo[] myPropertyInfo;
// Get the properties of 'Type' class object.
myPropertyInfo = Type.GetType("System.Type").GetProperties();
Console.WriteLine("Properties of System.Type are:");
for (int i = 0; i < myPropertyInfo.Length; i++)
{
    Console.WriteLine(myPropertyInfo[i].ToString());
}
Dim myPropertyInfo() As PropertyInfo
' Get the properties of 'Type' class object.
myPropertyInfo = Type.GetType("System.Type").GetProperties()
Console.WriteLine("Properties of System.Type are:")
Dim i As Integer
For i = 0 To myPropertyInfo.Length - 1
   Console.WriteLine(myPropertyInfo(i).ToString())
Next i

Комментарии

Вызов этой перегрузки, аналогичен вызову GetProperties(BindingFlags) перегрузка с bindingAttr аргумент равен BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public в C# и BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.Public в Visual Basic.Calling this overload is equivalent to calling the GetProperties(BindingFlags) overload with a bindingAttr argument equal to BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public in C# and BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.Public in Visual Basic. Он возвращает все открытые экземпляры и статические свойства, которые определяется типом, представленный текущим Type объекта, а также тех, унаследованные от базовых типов.It returns all public instance and static properties, both those defined by the type represented by the current Type object as well as those inherited from its base types.

Если у него есть хотя бы один открытый метод доступа, свойство считается открытым для отражения.A property is considered public to reflection if it has at least one accessor that is public. В противном случае свойство считается закрытым, и необходимо использовать BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (в Visual Basic, объединить значения, с помощью Or) для его получения.Otherwise the property is considered private, and you must use BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (in Visual Basic, combine the values using Or) to get it.

GetProperties Метод не возвращает свойства в определенном порядке, такие как алфавитном или в порядке объявления.The GetProperties method does not return properties in a particular order, such as alphabetical or declaration order. Ваш код не должен зависеть от порядка, в котором возвращаются свойства, так как этот порядок меняется.Your code must not depend on the order in which properties are returned, because that order varies.

В следующей таблице показаны, какие члены базового класса возвращаются Get методы при отражении типа.The following table shows what members of a base class are returned by the Get methods when reflecting on a type.

Тип членаMember Type StaticStatic СтатическимNon-Static
КонструкторConstructor НетNo НетNo
ПолеField НетNo Да.Yes. Поле всегда равно по имени и подписи.A field is always hide-by-name-and-signature.
событиеEvent НеприменимоNot applicable Правило системы общих типов является то, что наследование осуществляется так же, как и для методов, реализующих свойство.The common type system rule is that the inheritance is the same as that of the methods that implement the property. Отражении свойства по имени и подписи.Reflection treats properties as hide-by-name-and-signature. См. Примечание 2 ниже.See note 2 below.
МетодMethod НетNo Да.Yes. Метод (виртуальные и невиртуальные) можно скрыть по имени или по имени и подписи.A method (both virtual and non-virtual) can be hide-by-name or hide-by-name-and-signature.
Вложенный типNested Type НетNo НетNo
Свойство.Property НеприменимоNot applicable Правило системы общих типов является то, что наследование осуществляется так же, как и для методов, реализующих свойство.The common type system rule is that the inheritance is the same as that of the methods that implement the property. Отражении свойства по имени и подписи.Reflection treats properties as hide-by-name-and-signature. См. Примечание 2 ниже.See note 2 below.
  1. По имени и подписи считает, что все части сигнатуры, включая настраиваемые модификаторы, возвращают типы, типы параметров, меток и соглашения о неуправляемых вызовах.Hide-by-name-and-signature considers all of the parts of the signature, including custom modifiers, return types, parameter types, sentinels, and unmanaged calling conventions. Это двоичное сравнение.This is a binary comparison.

  2. Для отражения свойства и события являются по имени и подписи.For reflection, properties and events are hide-by-name-and-signature. Если у вас есть свойство с get и set в базовом классе, но производный класс имеет только метод доступа get, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу set в базовом классе.If you have a property with both a get and a set accessor in the base class, but the derived class has only a get accessor, the derived class property hides the base class property, and you will not be able to access the setter on the base class.

  3. Настраиваемые атрибуты не являются частью система общих типов CTS.Custom attributes are not part of the common type system.

Если текущий объект T:System.Type представляет сконструированный универсальный тип, этот метод возвращает PropertyInfo объекты с параметрами типа, заменены соответствующими аргументами типа.If the current T:System.Type represents a constructed generic type, this method returns the PropertyInfo objects with the type parameters replaced by the appropriate type arguments.

Если текущий Type представляет параметр типа в определении универсального типа или метода, этот метод ищет свойства ограничения класса.If the current Type represents a type parameter in the definition of a generic type or generic method, this method searches the properties of the class constraint.

См. также

GetProperties(BindingFlags) GetProperties(BindingFlags) GetProperties(BindingFlags) GetProperties(BindingFlags)

При переопределении в производном классе ищет свойства текущего объекта Type, используя указанные ограничения привязки. When overridden in a derived class, searches for the properties of the current Type, using the specified binding constraints.

public:
 abstract cli::array <System::Reflection::PropertyInfo ^> ^ GetProperties(System::Reflection::BindingFlags bindingAttr);
public abstract System.Reflection.PropertyInfo[] GetProperties (System.Reflection.BindingFlags bindingAttr);
abstract member GetProperties : System.Reflection.BindingFlags -> System.Reflection.PropertyInfo[]
Public MustOverride Function GetProperties (bindingAttr As BindingFlags) As PropertyInfo()
Параметры
bindingAttr
BindingFlags BindingFlags BindingFlags BindingFlags

Битовая маска, составленная из одного или нескольких объектов BindingFlags и указывающая, как ведется поиск. A bitmask comprised of one or more BindingFlags that specify how the search is conducted. - или - -or- Нуль, чтобы было возвращено значение null. Zero, to return null.

Возвраты

Массив объектов PropertyInfo, представляющий все свойства текущего типа Type, которые удовлетворяют указанным ограничениям привязки. An array of PropertyInfo objects representing all properties of the current Type that match the specified binding constraints. - или - -or- Пустой массив типа PropertyInfo, если у текущего типа Type нет свойств или ни одно свойство не удовлетворяет ограничениям привязки. An empty array of type PropertyInfo, if the current Type does not have properties, or if none of the properties match the binding constraints.

Реализации

Примеры

В следующем примере определяется класс с именем PropertyClass , включает в себя шесть свойств: два являются открытыми, один является закрытым, один защищен, один является внутренним (Friend в Visual Basic), и один protected internal (Protected Friend в Visual Basic).The following example defines a class named PropertyClass that includes six properties: two are public, one is private, one is protected, one is internal (Friend in Visual Basic), and one is protected internal (Protected Friend in Visual Basic). Затем он отобразит сведения о некоторых основных свойств (имя и тип, следует ли это чтение и запись и видимость его get и set методы доступа) для свойств, которые соответствуют указанным ограничениям привязки.It then displays some basic property information (the property name and type, whether it is read/write, and the visibility of its get and set accessors) for the properties that match the specified binding constraints.

using namespace System;
using namespace System::Reflection;

// Create a class having three properties.
public ref class PropertyClass
{

public:
   property String^ Property1
   {
      String^ get()
      {
         return "hello";
      }
   }

   property String^ Property2 
   {
      String^ get()
      {
         return "hello";
      }
   }

protected:
   property String^ Property3
   {
      String^ get()
      {
         return "hello";
      }
   }

private:
   property int Property4
   {
      int get()
      {
         return 32;
      }
   }

internal:
   property String^ Property5
   {
      String^ get()
      {
         return "value";
      }
   }
   
public protected:
   property String^ Property6
   {
      String^ get()
      {
         return "value";
      }
   }
};

String^ GetVisibility(MethodInfo^ accessor)
{
    if (accessor->IsPublic)
       return "Public";
    else if (accessor->IsPrivate)
       return "Private";
    else if (accessor->IsFamily)
       return "Protected";
    else if (accessor->IsAssembly)
       return "Internal/Friend";
    else
       return "Protected Internal/Friend";
}

void DisplayPropertyInfo(array<PropertyInfo^>^ propInfos )
{
   // Display information for all properties.
   for each(PropertyInfo^ propInfo in propInfos) {
      bool readable = propInfo->CanRead;
      bool writable = propInfo->CanWrite;
      
      Console::WriteLine("   Property name: {0}", propInfo->Name);
      Console::WriteLine("   Property type: {0}", propInfo->PropertyType);
      Console::WriteLine("   Read-Write:    {0}", readable && writable);
      if (readable) {
         MethodInfo^ getAccessor = propInfo->GetMethod;
         Console::WriteLine("   Visibility:    {0}",
                           GetVisibility(getAccessor));
      }
      if (writable) {
         MethodInfo^ setAccessor = propInfo->SetMethod;
         Console::WriteLine("   Visibility:    {0}",
                            GetVisibility(setAccessor));
      }
      Console::WriteLine();
   }
}

void main()
{
   Type^ myType = PropertyClass::typeid;
   
   // Get the public properties.
   array<PropertyInfo^>^propInfos = myType->GetProperties( static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
   Console::WriteLine("The number of public properties: {0}.\n",
                      propInfos->Length);
   // Display the public properties.
   DisplayPropertyInfo( propInfos );
   
   // Get the non-public properties.
   array<PropertyInfo^>^propInfos1 = myType->GetProperties( static_cast<BindingFlags>(BindingFlags::NonPublic | BindingFlags::Instance) );
   Console::WriteLine("The number of non-public properties: {0}.\n",
                      propInfos1->Length);
   // Display all the non-public properties.
   DisplayPropertyInfo(propInfos1);
}
// The example displays the following output:
//       The number of public properties: 2.
//
//          Property name: Property2
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Public
//
//          Property name: Property1
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Public
//
//       The number of non-public properties: 4.
//
//          Property name: Property6
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Protected Internal/Friend
//
//          Property name: Property5
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Internal/Friend
//
//          Property name: Property4
//          Property type: System.Int32
//          Read-Write:    False
//          Visibility:    Private
//
//          Property name: Property3
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Protected
using System;
using System.Reflection;

// Create a class having six properties.
public class PropertyClass
{
    public String Property1
    {
        get { return "hello"; }
    }

    public String Property2
    {
        get { return "hello"; }
    }

    protected String Property3
    {
        get { return "hello"; }
    }

    private Int32 Property4
    {
        get { return 32; }
    }

    internal String Property5
    {
       get { return "value"; }
    }

    protected internal String Property6
    {
       get { return "value"; }
    }
}

public class Example
{
    public static void Main() 
    {
        Type t = typeof(PropertyClass);
        // Get the public properties.
        PropertyInfo[] propInfos = t.GetProperties(BindingFlags.Public|BindingFlags.Instance);
        Console.WriteLine("The number of public properties: {0}.\n",
                          propInfos.Length);
        // Display the public properties.
        DisplayPropertyInfo(propInfos);

        // Get the nonpublic properties.
        PropertyInfo[] propInfos1 = t.GetProperties(BindingFlags.NonPublic|BindingFlags.Instance);
        Console.WriteLine("The number of non-public properties: {0}.\n",
                          propInfos1.Length);
        // Display all the nonpublic properties.
        DisplayPropertyInfo(propInfos1);
    }

    public static void DisplayPropertyInfo(PropertyInfo[] propInfos)
    {
        // Display information for all properties.
        foreach (var propInfo in propInfos) {
            bool readable = propInfo.CanRead;
            bool writable = propInfo.CanWrite;
            
            Console.WriteLine("   Property name: {0}", propInfo.Name);
            Console.WriteLine("   Property type: {0}", propInfo.PropertyType);
            Console.WriteLine("   Read-Write:    {0}", readable & writable);
            if (readable) {
               MethodInfo getAccessor = propInfo.GetMethod;
               Console.WriteLine("   Visibility:    {0}",
                                 GetVisibility(getAccessor));
            }
            if (writable) {
               MethodInfo setAccessor = propInfo.SetMethod;
               Console.WriteLine("   Visibility:    {0}",
                                 GetVisibility(setAccessor));
            }
            Console.WriteLine();
        }
    }

    public static String GetVisibility(MethodInfo accessor)
    {
       if (accessor.IsPublic)
          return "Public";
       else if (accessor.IsPrivate)
          return "Private";
       else if (accessor.IsFamily)
          return "Protected";
       else if (accessor.IsAssembly)
          return "Internal/Friend";
       else
          return "Protected Internal/Friend";
    }
}
// The example displays the following output:
//       The number of public properties: 2.
//
//          Property name: Property1
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Public
//
//          Property name: Property2
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Public
//
//       The number of non-public properties: 4.
//
//          Property name: Property3
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Protected
//
//          Property name: Property4
//          Property type: System.Int32
//          Read-Write:    False
//          Visibility:    Private
//
//          Property name: Property5
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Internal/Friend
//
//          Property name: Property6
//          Property type: System.String
//          Read-Write:    False
//          Visibility:    Protected Internal/Friend
Imports System.Reflection

' Create a class having six properties.
Public Class PropertyClass
    Public ReadOnly Property Property1() As String
        Get
            Return "hello"
        End Get
    End Property

    Public ReadOnly Property Property2() As String
        Get
            Return "hello"
        End Get
    End Property

    Protected ReadOnly Property Property3() As String
        Get
            Return "hello"
        End Get
    End Property

    Private ReadOnly Property Property4 As Integer
        Get
           Return 32
        End Get
    End Property

    Friend ReadOnly Property Property5 As String
       Get
          Return "value"
       End Get
    End Property

    Protected Friend ReadOnly Property Property6 As String
       Get
          Return "value"
       End Get
    End Property
End Class

Public Module Example
    Public Sub Main()
        Dim t As Type = GetType(PropertyClass)
        ' Get the public properties.
        Dim propInfos As PropertyInfo() = t.GetProperties(BindingFlags.Public Or BindingFlags.Instance)
        Console.WriteLine("The number of public properties: {0}",
                          propInfos.Length)
        Console.WriteLine()
        ' Display the public properties.
        DisplayPropertyInfo(propInfos)

        ' Get the non-public properties.
        Dim propInfos1 As PropertyInfo() = t.GetProperties(BindingFlags.NonPublic Or BindingFlags.Instance)
        Console.WriteLine("The number of non-public properties: {0}",
                          propInfos1.Length)
        Console.WriteLine()
        ' Display all the non-public properties.
        DisplayPropertyInfo(propInfos1)
    End Sub

    Public Sub DisplayPropertyInfo(ByVal propInfos() As PropertyInfo)
        ' Display information for all properties.
        For Each propInfo In propInfos
            Dim readable As Boolean = propInfo.CanRead
            Dim writable As Boolean = propInfo.CanWrite
            
            Console.WriteLine("   Property name: {0}", propInfo.Name)
            Console.WriteLine("   Property type: {0}", propInfo.PropertyType)
            Console.WriteLine("   Read-Write:    {0}", readable And writable)
            If readable Then
               Dim getAccessor As MethodInfo = propInfo.GetMethod
               Console.WriteLine("   Visibility:    {0}",
                                 GetVisibility(getAccessor))
            End If
            If writable Then
               Dim setAccessor As MethodInfo = propInfo.SetMethod
               Console.WriteLine("   Visibility:    {0}",
                                 GetVisibility(setAccessor))
            End If
            Console.WriteLine()
        Next
    End Sub
    
    Public Function GetVisibility(accessor As MethodInfo) As String
       If accessor.IsPublic Then
          Return "Public"
       ElseIf accessor.IsPrivate Then
          Return "Private"
       Else If accessor.IsFamily Then
          Return "Protected"
       Else If accessor.IsAssembly Then
          Return "Internal/Friend"
       Else
          Return "Protected Internal/Friend"
       End If
    End Function
End Module
' The example displays the following output:
'       The number of public properties: 2
'
'          Property name: Property1
'          Property type: System.String
'          Read-Write:    False
'          Visibility:    Public
'
'          Property name: Property2
'          Property type: System.String
'          Read-Write:    False
'          Visibility:    Public
'
'       The number of non-public properties: 4
'
'          Property name: Property3
'          Property type: System.String
'          Read-Write:    False
'          Visibility:    Protected
'
'          Property name: Property4
'          Property type: System.Int32
'          Read-Write:    False
'          Visibility:    Private
'
'          Property name: Property5
'          Property type: System.String
'          Read-Write:    False
'          Visibility:    Internal/Friend
'
'          Property name: Property6
'          Property type: System.String
'          Read-Write:    False
'          Visibility:    Protected Internal/Friend

Комментарии

Если у него есть хотя бы один открытый метод доступа, свойство считается открытым для отражения.A property is considered public to reflection if it has at least one accessor that is public. В противном случае свойство считается закрытым, и необходимо использовать BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (в Visual Basic, объединить значения, с помощью Or) для его получения.Otherwise the property is considered private, and you must use BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (in Visual Basic, combine the values using Or) to get it.

GetProperties Метод не возвращает свойства в определенном порядке, такие как алфавитном или в порядке объявления.The GetProperties method does not return properties in a particular order, such as alphabetical or declaration order. Ваш код не должен зависеть от порядка, в котором возвращаются свойства, так как этот порядок меняется.Your code must not depend on the order in which properties are returned, because that order varies.

Следующие BindingFlags фильтра флаги можно использовать для определения, какие вложенные типы будут включены в поиск:The following BindingFlags filter flags can be used to define which nested types to include in the search:

  • Необходимо указать либо BindingFlags.Instance или BindingFlags.Static Чтобы получить возвращаемое значение.You must specify either BindingFlags.Instance or BindingFlags.Static in order to get a return.

  • Укажите BindingFlags.Public для включения в поиск открытые свойства.Specify BindingFlags.Public to include public properties in the search.

  • Укажите BindingFlags.NonPublic для включения в поиск свойств не являющиеся открытыми (то есть внутренней, закрытые и защищенные свойства).Specify BindingFlags.NonPublic to include non-public properties (that is, private, internal, and protected properties) in the search. Только защищенные и внутренние свойства базовых классов, возвращаются; частные свойства базовых классов не возвращаются.Only protected and internal properties on base classes are returned; private properties on base classes are not returned.

  • Укажите BindingFlags.FlattenHierarchy для включения public и protected статические члены вверху иерархии; private статические члены в наследуемых классах не включаются.Specify BindingFlags.FlattenHierarchy to include public and protected static members up the hierarchy; private static members in inherited classes are not included.

Следующие BindingFlags флаги модификаторов, которые можно использовать для изменения условий поиска:The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.DeclaredOnly для поиска только свойства, объявленные в Type, не те свойства, унаследованные.BindingFlags.DeclaredOnly to search only the properties declared on the Type, not properties that were simply inherited.

Дополнительные сведения см. в разделе System.Reflection.BindingFlags.See System.Reflection.BindingFlags for more information.

Если у него есть хотя бы один открытый метод доступа, свойство считается открытым для отражения.A property is considered public to reflection if it has at least one accessor that is public. В противном случае свойство считается закрытым, и необходимо использовать BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (в Visual Basic, объединить значения, с помощью Or) для его получения.Otherwise the property is considered private, and you must use BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (in Visual Basic, combine the values using Or) to get it.

Если текущий объект T:System.Type представляет сконструированный универсальный тип, этот метод возвращает PropertyInfo объекты с параметрами типа, заменены соответствующими аргументами типа.If the current T:System.Type represents a constructed generic type, this method returns the PropertyInfo objects with the type parameters replaced by the appropriate type arguments.

Если текущий Type представляет параметр типа в определении универсального типа или метода, этот метод ищет свойства ограничения класса.If the current Type represents a type parameter in the definition of a generic type or generic method, this method searches the properties of the class constraint.

См. также

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