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 с аргументом C# , BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.Public равным BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public in и в 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. При скрытии по имени и сигнатуре учитываются все части сигнатуры, включая пользовательские модификаторы, возвращаемые типы, типы параметров, Sentinel и неуправляемые соглашения о вызовах.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, свойство производного класса скрывает свойство базового класса, и вы не сможете получить доступ к методу задания в базовом классе.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. Настраиваемые атрибуты не являются частью системы общих типов.Custom attributes are not part of the common type system.

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

Если Current 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

Побитовое сочетание значений перечисления, указывающих способ проведения поиска.A bitwise combination of the enumeration values that specify how the search is conducted.

- или --or-

Default для возврата пустого массива.Default to return an empty array.

Возвраты

Массив объектов, представляющий все свойства текущего Type, которые удовлетворяют указанным ограничениям привязки.An array of 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 , включающий шесть свойств: два — Public, один — частный, один — защищенный, один —Friend внутренний (в Visual Basic), а второй — защищенный внутренний (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

Комментарии

BindingFlags.NonPublic BindingFlags.Instance bindingAttr BindingFlags.Public BindingFlags.StaticЧтобы перегрузка успешно получала сведения о свойствах, аргумент должен включать по крайней мере один из параметров и, а также хотя бы один из параметров и. GetProperties(BindingFlags)For the GetProperties(BindingFlags) overload to successfully retrieve property information, the bindingAttr argument must include at least one of BindingFlags.Instance and BindingFlags.Static, along with at least one of BindingFlags.NonPublic and BindingFlags.Public.

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

  • Укажите BindingFlags.Instance , чтобы включить методы экземпляра.Specify BindingFlags.Instance to include instance methods.

  • Укажите BindingFlags.Static , чтобы включить статические методы.Specify BindingFlags.Static to include static methods.

  • Укажите BindingFlags.Public , чтобы включить в поиск открытые свойства.Specify BindingFlags.Public to include public properties in the search. Свойство считается открытым для отражения, если у него есть по крайней мере один открытый метод доступа.A property is considered public to reflection if it has at least one accessor that is public.

  • Укажите 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.Default отдельный, чтобы вернуть пустой PropertyInfo массив.Specify BindingFlags.Default alone to return an empty PropertyInfo array.

Для изменения 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.

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.

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

Если Current 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.

Дополнительно

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