Type.GetProperty 方法

定义

获取当前 Type 的特定属性。

重载

GetProperty(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])

使用指定的绑定约束,搜索参数与指定的自变量类型及修饰符匹配的指定属性。

GetProperty(String)

搜索具有指定名称的公共属性。

GetProperty(String, BindingFlags)

使用指定的绑定约束搜索指定属性。

GetProperty(String, Type)

搜索具有指定名称和返回类型的公共属性。

GetProperty(String, Type[])

搜索其参数与指定自变量类型匹配的指定公共属性。

GetProperty(String, Type, Type[])

搜索其参数与指定自变量类型匹配的指定公共属性。

GetProperty(String, Type, Type[], ParameterModifier[])

搜索其参数与指定自变量类型及修饰符匹配的指定公共属性。

GetProperty(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])

使用指定的绑定约束,搜索参数与指定的自变量类型及修饰符匹配的指定属性。

public:
 virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, Type ^ returnType, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
public System.Reflection.PropertyInfo? GetProperty (string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, Type? returnType, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
public System.Reflection.PropertyInfo GetProperty (string name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, Type returnType, Type[] types, System.Reflection.ParameterModifier[] modifiers);
abstract member GetProperty : string * System.Reflection.BindingFlags * System.Reflection.Binder * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
override this.GetProperty : string * System.Reflection.BindingFlags * System.Reflection.Binder * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, bindingAttr As BindingFlags, binder As Binder, returnType As Type, types As Type(), modifiers As ParameterModifier()) As PropertyInfo

参数

name
String

包含要获取的属性名的字符串。

bindingAttr
BindingFlags

枚举值的按位组合,这些值指定如何进行搜索。

  • 或 - 若为 Default,则返回 null
binder
Binder

一个对象,该对象定义一组属性并启用绑定,而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。

  • 或 - 要使用 Nothing 的空引用(在 Visual Basic 中为 DefaultBinder)。
returnType
Type

属性的返回类型。

types
Type[]

一个 Type 对象数组,表示要获取的索引属性的参数的数目、顺序和类型。

  • 或 - 获取未被索引的属性的 Type 类型的空数组(即 Type[] types = new Type[0])。
modifiers
ParameterModifier[]

ParameterModifier 对象的数组,表示与 types 数组中的相应元素关联的特性。 默认的联编程序不处理此参数。

返回

PropertyInfo

表示符合指定需求的属性的对象(如果找到的话);否则为 null

实现

例外

找到多个具有指定名称的属性且属性与指定绑定约束匹配。

name 上声明的默认值为 null

  • 或 - types 上声明的默认值为 null

types 是多维的。

  • 或 - modifiers 是多维的。

  • 或 - typesmodifiers 的长度不相同。

types 的元素为 null

注解

如果属性具有至少一个公共访问器,则该属性被视为对反射的公共访问器。 否则,属性被视为私有,并且必须使用 || (Visual Basic,使用) 合并值才能 BindingFlags.NonPublic BindingFlags.Instance BindingFlags.Static Or 获取它。

尽管默认联编程序不 (参数) ,但可以使用抽象类编写处理 的 ParameterModifier modifiers System.Reflection.Binder 自定义联编程序 modifiersParameterModifier 仅在通过 COM 互操作调用 时使用,并且仅处理通过引用传递的参数。

下表显示了在类型上反射时,方法返回的基 Get 类的成员。

成员类型 静态 非静态
构造函数
字段 可以。 字段始终按名称和签名进行隐藏。
事件 不适用 常见类型系统规则是继承与实现 属性的方法的继承相同。 反射将属性视为按名称和签名进行隐藏。 请参阅下面的注释 2。
方法 可以。 一 (虚拟和非虚拟) 可以按名称隐藏,也可以按名称和签名进行隐藏。
嵌套类型
properties 不适用 常见类型系统规则是继承与实现 属性的方法的继承相同。 反射将属性视为按名称和签名进行隐藏。 请参阅下面的注释 2。
  1. "按名称隐藏"和"签名"考虑签名的所有部分,包括自定义修饰符、返回类型、参数类型、sentinels 以及非托管调用约定。 这是二进制比较。

  2. 对于反射,属性和事件按名称和签名进行隐藏。 如果属性在基类中同时具有 get 和 set 访问器,但派生类只有 get 访问器,则派生类属性将隐藏基类属性,并且你将无法访问基类上的 setter。

  3. 自定义属性不是通用类型系统的一部分。

以下 BindingFlags 筛选器标志可用于定义要包括在搜索中的属性:

  • 必须指定 或 BindingFlags.Instance BindingFlags.Static 才能获取返回。

  • 指定 BindingFlags.Public 以在搜索中包括公共属性。

  • 指定 以在搜索 (包括非公共属性,即私有、) BindingFlags.NonPublic 和受保护属性。

  • 指定 BindingFlags.FlattenHierarchy 以包括 public 层次结构 protected 中的静态成员;不包括继承类 private 中的静态成员。

以下 BindingFlags 修饰符标志可用于更改搜索的工作方式:

  • BindingFlags.IgnoreCase (如果忽略 name 的大小写)。

  • BindingFlags.DeclaredOnly 如果只搜索在 上声明的属性 Type ,则不搜索直接继承的属性。

有关更多信息,请参见System.Reflection.BindingFlags

如果当前 Type 表示构造的泛型类型,则此方法返回 ,类型参数 PropertyInfo 替换为相应的类型参数。

如果当前 表示泛型类型或泛型方法的定义中的类型参数,则此方法将搜索类 Type 约束的属性。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 简化了用于访问索引属性的语法,并允许一个索引属性成为其类型的默认值。 例如,如果 变量引用 ,则 (中的语法Visual Basic) 检索索引 myList ArrayListmyList[3] myList(3) 3 的元素。 可以重载 属性。

在 C# 中,此功能称为索引器,不能按名称引用。 默认情况下,C# 索引器在元数据中显示为名为"Item"的索引属性。 但是,类库开发人员可以使用 IndexerNameAttribute 属性更改元数据中索引器的名称。 例如, String 类有一个名为 的索引器 Chars[] 。 使用 C# 外的语言创建的索引属性也可以具有除 Item 外的名称。

若要确定类型是否具有默认属性,请使用 GetCustomAttributes(Type, Boolean) 方法测试 DefaultMemberAttribute 属性。 如果类型具有 DefaultMemberAttributeMemberName 则 属性返回默认属性的名称。

另请参阅

适用于

GetProperty(String)

搜索具有指定名称的公共属性。

public:
 System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name);
public:
 virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name);
public System.Reflection.PropertyInfo? GetProperty (string name);
public System.Reflection.PropertyInfo GetProperty (string name);
member this.GetProperty : string -> System.Reflection.PropertyInfo
abstract member GetProperty : string -> System.Reflection.PropertyInfo
override this.GetProperty : string -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String) As PropertyInfo

参数

name
String

包含要获取的公共属性名的字符串。

返回

PropertyInfo

表示具有指定名称的公共属性的对象(如果找到的话);否则为 null

实现

例外

找到了多个具有指定名称的属性。

name 上声明的默认值为 null

示例

下面的示例检索用户定义类的 对象,检索该类的属性, Type 并显示属性名称。

using namespace System;
using namespace System::Reflection;
ref class MyClass
{
private:
   int myProperty;

public:

   property int MyProperty 
   {
      // Declare MyProperty.
      int get()
      {
         return myProperty;
      }

      void set( int value )
      {
         myProperty = value;
      }
   }
};

int main()
{
   try
   {
      // Get the Type object corresponding to MyClass.
      Type^ myType = MyClass::typeid;
      
      // Get the PropertyInfo object by passing the property name.
      PropertyInfo^ myPropInfo = myType->GetProperty( "MyProperty" );
      
      // Display the property name.
      Console::WriteLine( "The {0} property exists in MyClass.", myPropInfo->Name );
   }
   catch ( NullReferenceException^ e ) 
   {
      Console::WriteLine( "The property does not exist in MyClass. {0}", e->Message );
   }
}

using System;
using System.Reflection;

class MyClass
{
    private int myProperty;
    // Declare MyProperty.
    public int MyProperty
    {
        get
        {
            return myProperty;
        }
        set
        {
            myProperty=value;
        }
    }
}
public class MyTypeClass
{
    public static void Main(string[] args)
    {
        try
        {
            // Get the Type object corresponding to MyClass.
            Type myType=typeof(MyClass);
            // Get the PropertyInfo object by passing the property name.
            PropertyInfo myPropInfo = myType.GetProperty("MyProperty");
            // Display the property name.
            Console.WriteLine("The {0} property exists in MyClass.", myPropInfo.Name);
        }
        catch(NullReferenceException e)
        {
            Console.WriteLine("The property does not exist in MyClass." + e.Message);
        }
    }
}
Imports System.Reflection
Class MyClass1
    Private myProperty1 As Integer
    ' Declare MyProperty.

    Public Property MyProperty() As Integer
        Get
            Return myProperty1
        End Get
        Set(ByVal Value As Integer)
            myProperty1 = Value
        End Set
    End Property
End Class

Public Class MyTypeClass
    Public Shared Sub Main(ByVal args() As String)
        Try
            ' Get Type Object corresponding to MyClass.
            Dim myType As Type = GetType(MyClass1)
            ' Get PropertyInfo object by passing property name.
            Dim myPropInfo As PropertyInfo = myType.GetProperty("MyProperty")
            ' Display Name propety to console.
            Console.WriteLine("The {0} property exists in MyClass.", myPropInfo.Name)
        Catch e As NullReferenceException
            Console.WriteLine("The property does not exist in MyClass.", e.Message.ToString())
        End Try
    End Sub
End Class

在内部,此属性在元数据中称为"Item"。 任何尝试使用反射 PropertyInfo 的尝试都必须指定此内部名称才能正确返回 PropertyInfo 属性。

注解

搜索 name 区分大小写。 搜索包括公共静态和公共实例属性。

如果属性具有至少一个公共访问器,则该属性被视为对反射的公共访问器。 否则,属性被视为私有,并且必须使用 BindingFlags.NonPublic BindingFlags.Instance || (中的 Visual Basic,使用) 合并 BindingFlags.Static 值才能 Or 获取它。

如果当前 Type 表示构造的泛型类型,则此方法返回 ,类型参数 PropertyInfo 替换为相应的类型参数。

如果当前 表示泛型类型或泛型方法的定义中的类型参数,则此方法将搜索类 Type 约束的属性。

发生的情况 AmbiguousMatchException 包括:

  • 类型包含两个索引属性,它们具有相同的名称,但参数数量不同。 若要解决多义性,请使用指定参数类型的 GetProperty 方法的重载。

  • 派生类型声明一个属性,该属性通过使用 Visual Basic) 中的 修饰符来隐藏同名 new 的继承 Shadows (属性。 若要解决多义性,请使用 方法重载并添加 标志,以将搜索限制为 GetProperty(String, BindingFlags) BindingFlags.DeclaredOnly 未继承的成员。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 简化了用于访问索引属性的语法,并允许一个索引属性成为其类型的默认值。 例如,如果 变量引用 ,则 (中的语法Visual Basic) 检索索引 myList ArrayListmyList[3] myList(3) 3 的元素。 可以重载 属性。

在 C# 中,此功能称为索引器,不能按名称引用。 默认情况下,C# 索引器在元数据中显示为名为"Item"的索引属性。 但是,类库开发人员可以使用 IndexerNameAttribute 属性更改元数据中索引器的名称。 例如, String 类有一个名为 的索引器 Chars[] 。 使用 C# 外的语言创建的索引属性也可以具有除 Item 外的名称。

若要确定类型是否具有默认属性,请使用 GetCustomAttributes(Type, Boolean) 方法测试 DefaultMemberAttribute 属性。 如果类型具有 DefaultMemberAttributeMemberName 则 属性返回默认属性的名称。

另请参阅

适用于

GetProperty(String, BindingFlags)

使用指定的绑定约束搜索指定属性。

public:
 virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, System::Reflection::BindingFlags bindingAttr);
public System.Reflection.PropertyInfo? GetProperty (string name, System.Reflection.BindingFlags bindingAttr);
public System.Reflection.PropertyInfo GetProperty (string name, System.Reflection.BindingFlags bindingAttr);
abstract member GetProperty : string * System.Reflection.BindingFlags -> System.Reflection.PropertyInfo
override this.GetProperty : string * System.Reflection.BindingFlags -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, bindingAttr As BindingFlags) As PropertyInfo

参数

name
String

包含要获取的属性名的字符串。

bindingAttr
BindingFlags

枚举值的按位组合,这些值指定如何进行搜索。

  • 或 - 若为 Default,则返回 null

返回

PropertyInfo

表示符合指定需求的属性的对象(如果找到的话);否则为 null

实现

例外

找到多个具有指定名称的属性且属性与指定绑定约束匹配。

name 上声明的默认值为 null

示例

下面的示例检索用户定义类的类型,检索该类的属性,并按指定的绑定约束显示属性名称。

using namespace System;
using namespace System::Reflection;
ref class MyClass
{
private:
   int myProperty;

public:

   property int MyProperty 
   {
      // Declare MyProperty.
      int get()
      {
         return myProperty;
      }

      void set( int value )
      {
         myProperty = value;
      }
   }
};

int main()
{
   try
   {
      // Get Type object of MyClass.
      Type^ myType = MyClass::typeid;
      
      // Get the PropertyInfo by passing the property name and specifying the BindingFlags.
      PropertyInfo^ myPropInfo = myType->GetProperty( "MyProperty", static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance) );
      
      // Display Name propety to console.
      Console::WriteLine( "{0} is a property of MyClass.", myPropInfo->Name );
   }
   catch ( NullReferenceException^ e ) 
   {
      Console::WriteLine( "MyProperty does not exist in MyClass. {0}", e->Message );
   }
}

using System;
using System.Reflection;
class MyClass
{
    private int myProperty;
    // Declare MyProperty.
    public int MyProperty
    {
        get
        {
            return myProperty;
        }
        set
        {
            myProperty=value;
        }
    }
}
public class MyTypeClass
{
    public static void Main(string[] args)
    {
        try
        {
            // Get Type object of MyClass.
            Type myType=typeof(MyClass);
            // Get the PropertyInfo by passing the property name and specifying the BindingFlags.
            PropertyInfo myPropInfo = myType.GetProperty("MyProperty", BindingFlags.Public | BindingFlags.Instance);
            // Display Name propety to console.
            Console.WriteLine("{0} is a property of MyClass.", myPropInfo.Name);
        }
        catch(NullReferenceException e)
        {
            Console.WriteLine("MyProperty does not exist in MyClass." +e.Message);
        }
    }
}

Imports System.Reflection
Module Module1
    Public Class MyClass1
        Private myProperty1 As Integer
        ' Declare MyProperty.
        Public Property MyProperty() As Integer
            Get
                Return myProperty1
            End Get
            Set(ByVal Value As Integer)
                myProperty1 = Value
            End Set
        End Property
        Public Shared Sub Main()
            Try
                ' Get a Type object corresponding to MyClass.
                Dim myType As Type = GetType(MyClass1)
                ' Get a PropertyInfo object by passing property name and specifying BindingFlags.
                Dim myPropInfo As PropertyInfo = myType.GetProperty("MyProperty", BindingFlags.Public Or BindingFlags.Instance)
                ' Display the Name property.
                Console.WriteLine("{0} is a property of MyClass.", myPropInfo.Name)
            Catch e As NullReferenceException
                Console.WriteLine("MyProperty does not exist in MyClass.", e.Message.ToString())
            End Try
        End Sub
    End Class
End Module 'Module1

注解

如果属性具有至少一个公共访问器,则该属性被视为对反射的公共访问器。 否则,属性被视为私有,并且必须使用 BindingFlags.NonPublic BindingFlags.Instance || (中的 Visual Basic,使用) 合并 BindingFlags.Static 值才能 Or 获取它。

以下 BindingFlags 筛选器标志可用于定义要包括在搜索中的属性:

  • 必须指定 或 BindingFlags.Instance BindingFlags.Static 才能获取返回。

  • 指定 BindingFlags.Public 以在搜索中包括公共属性。

  • 指定 以在搜索 (包括非公共属性,即) BindingFlags.NonPublic 属性。

  • 指定 BindingFlags.FlattenHierarchy 以包括 public 层次结构 protected 中的静态成员;不包括继承类 private 中的静态成员。

以下 BindingFlags 修饰符标志可用于更改搜索的工作方式:

  • BindingFlags.IgnoreCase (如果忽略 name 的大小写)。

  • BindingFlags.DeclaredOnly 如果只搜索在 上声明的属性 Type ,则不搜索直接继承的属性。

有关更多信息,请参见System.Reflection.BindingFlags

如果当前 Type 表示构造的泛型类型,则此方法返回 ,类型参数 PropertyInfo 替换为相应的类型参数。

如果当前 表示泛型类型或泛型方法的定义中的类型参数,则此方法将搜索类 Type 约束的属性。

发生的情况 AmbiguousMatchException 包括:

  • 类型包含两个索引属性,它们具有相同的名称,但参数数量不同。 若要解决多义性,请使用指定参数类型的 GetProperty 方法的重载。

  • 派生类型声明一个属性,该属性使用 Visual Basic) 中的 修饰符隐藏同名 newShadows 继承 (属性。 若要解决多义性,请包含 BindingFlags.DeclaredOnly 以将搜索限制为未继承的成员。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 简化了用于访问索引属性的语法,并允许一个索引属性成为其类型的默认值。 例如,如果 变量引用 ,则 (中的语法Visual Basic) 检索索引 myList ArrayListmyList[3] myList(3) 3 的元素。 可以重载 属性。

在 C# 中,此功能称为索引器,不能按名称引用。 默认情况下,C# 索引器在元数据中显示为名为"Item"的索引属性。 但是,类库开发人员可以使用 IndexerNameAttribute 属性更改元数据中索引器的名称。 例如, String 类有一个名为 的索引器 Chars[] 。 使用 C# 外的语言创建的索引属性也可以具有除 Item 外的名称。

若要确定类型是否具有默认属性,请使用 GetCustomAttributes(Type, Boolean) 方法测试 DefaultMemberAttribute 属性。 如果类型具有 DefaultMemberAttributeMemberName 则 属性返回默认属性的名称。

另请参阅

适用于

GetProperty(String, Type)

搜索具有指定名称和返回类型的公共属性。

public:
 System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType);
public:
 virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType);
public System.Reflection.PropertyInfo? GetProperty (string name, Type? returnType);
public System.Reflection.PropertyInfo GetProperty (string name, Type returnType);
member this.GetProperty : string * Type -> System.Reflection.PropertyInfo
abstract member GetProperty : string * Type -> System.Reflection.PropertyInfo
override this.GetProperty : string * Type -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, returnType As Type) As PropertyInfo

参数

name
String

包含要获取的公共属性名的字符串。

returnType
Type

属性的返回类型。

返回

PropertyInfo

表示具有指定名称的公共属性的对象(如果找到的话);否则为 null

实现

例外

找到了多个具有指定名称的属性。

namenull,或 returnTypenull

示例

下面的示例定义了一个类,该类具有一个 属性,并检索属性的名称和类型。

using namespace System;
using namespace System::Reflection;
ref class MyClass1
{
private:
   String^ myMessage;

public:

   property String^ MyProperty1 
   {
      String^ get()
      {
         return myMessage;
      }

      void set( String^ value )
      {
         myMessage = value;
      }
   }
};

int main()
{
   try
   {
      Type^ myType = MyClass1::typeid;
      
      // Get the PropertyInfo Object* representing MyProperty1.
      PropertyInfo^ myStringProperties1 = myType->GetProperty( "MyProperty1", String::typeid );
      Console::WriteLine( "The name of the first property of MyClass1 is {0}.", myStringProperties1->Name );
      Console::WriteLine( "The type of the first property of MyClass1 is {0}.", myStringProperties1->PropertyType );
   }
   catch ( ArgumentNullException^ e ) 
   {
      Console::WriteLine( "ArgumentNullException : {0}", e->Message );
   }
   catch ( AmbiguousMatchException^ e ) 
   {
      Console::WriteLine( "AmbiguousMatchException : {0}", e->Message );
   }
   catch ( NullReferenceException^ e ) 
   {
      Console::WriteLine( "Source : {0}", e->Source );
      Console::WriteLine( "Message : {0}", e->Message );
   }
   //Output:
   //The name of the first property of MyClass1 is MyProperty1.
   //The type of the first property of MyClass1 is System.String.

}

using System;
using System.Reflection;

class MyClass1
{
    String myMessage="Hello World.";
    public string MyProperty1
    {
        get
        {			
            return myMessage;
        }
        set
        {
            myMessage =value;
        }			
    }
}
class TestClass
{
    static void Main()
    {
        try
        {	
            Type myType = typeof(MyClass1);
            // Get the PropertyInfo object representing MyProperty1.
            PropertyInfo myStringProperties1 = myType.GetProperty("MyProperty1",
                typeof(string));
            Console.WriteLine("The name of the first property of MyClass1 is {0}.", myStringProperties1.Name);
            Console.WriteLine("The type of the first property of MyClass1 is {0}.", myStringProperties1.PropertyType);
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException :"+e.Message);
        }
        catch(AmbiguousMatchException e)
        {
            Console.WriteLine("AmbiguousMatchException :"+e.Message);
        }
        catch(NullReferenceException e)
        {
            Console.WriteLine("Source : {0}" , e.Source);
            Console.WriteLine("Message : {0}" , e.Message);
        }
    //Output:
    //The name of the first property of MyClass1 is MyProperty1.
    //The type of the first property of MyClass1 is System.String.
    }
}
Imports System.Reflection
Class MyClass1
    Private myMessage As [String] = "Hello World."
    Public Property MyProperty1() As String
        Get
            Return myMessage
        End Get
        Set(ByVal Value As String)
            myMessage = Value
        End Set
    End Property
End Class

Class TestClass
    Shared Sub Main()
        Try
            Dim myType As Type = GetType(MyClass1)
            ' Get the PropertyInfo object representing MyProperty1. 
            Dim myStringProperties1 As PropertyInfo = myType.GetProperty("MyProperty1", GetType(String))
            Console.WriteLine("The name of the first property of MyClass1 is {0}.", myStringProperties1.Name)
            Console.WriteLine("The type of the first property of MyClass1 is {0}.", myStringProperties1.PropertyType.ToString())
        Catch e As ArgumentNullException
            Console.WriteLine("ArgumentNullException :" + e.Message.ToString())
        Catch e As AmbiguousMatchException
            Console.WriteLine("AmbiguousMatchException :" + e.Message.ToString())
        Catch e As NullReferenceException
            Console.WriteLine("Source : {0}", e.Source.ToString())
            Console.WriteLine("Message : {0}", e.Message.ToString())
        End Try
    'Output:
    'The name of the first property of MyClass1 is MyProperty1.
    'The type of the first property of MyClass1 is System.String.

    End Sub
End Class

注解

如果属性具有至少一个公共访问器,则该属性被视为对反射的公共访问器。 否则,属性被视为私有,并且必须使用 BindingFlags.NonPublic BindingFlags.Instance || (中的 Visual Basic,使用) 合并 BindingFlags.Static 值才能 Or 获取它。

搜索 name 区分大小写。 搜索包括公共静态和公共实例属性。

如果当前 Type 表示构造的泛型类型,则此方法返回 ,类型参数 PropertyInfo 替换为相应的类型参数。

如果当前 表示泛型类型或泛型方法的定义中的类型参数,则此方法将搜索类 Type 约束的属性。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 简化了用于访问索引属性的语法,并允许一个索引属性成为其类型的默认值。 例如,如果 变量引用 ,则 (中的语法Visual Basic) 检索索引 myList ArrayListmyList[3] myList(3) 3 的元素。 可以重载 属性。

在 C# 中,此功能称为索引器,不能按名称引用。 默认情况下,C# 索引器在元数据中显示为名为"Item"的索引属性。 但是,类库开发人员可以使用 IndexerNameAttribute 属性更改元数据中索引器的名称。 例如, String 类有一个名为 的索引器 Chars[] 。 使用 C# 外的语言创建的索引属性也可以具有除 Item 外的名称。

若要确定类型是否具有默认属性,请使用 GetCustomAttributes(Type, Boolean) 方法测试 DefaultMemberAttribute 属性。 如果类型具有 DefaultMemberAttributeMemberName 则 属性返回默认属性的名称。

另请参阅

适用于

GetProperty(String, Type[])

搜索其参数与指定自变量类型匹配的指定公共属性。

public:
 System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, cli::array <Type ^> ^ types);
public:
 virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, cli::array <Type ^> ^ types);
public System.Reflection.PropertyInfo? GetProperty (string name, Type[] types);
public System.Reflection.PropertyInfo GetProperty (string name, Type[] types);
member this.GetProperty : string * Type[] -> System.Reflection.PropertyInfo
abstract member GetProperty : string * Type[] -> System.Reflection.PropertyInfo
override this.GetProperty : string * Type[] -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, types As Type()) As PropertyInfo

参数

name
String

包含要获取的公共属性名的字符串。

types
Type[]

一个 Type 对象数组,表示要获取的索引属性的参数的数目、顺序和类型。

  • 或 - 获取未被索引的属性的 Type 类型的空数组(即 Type[] types = new Type[0])。

返回

PropertyInfo

表示其参数与指定参数类型匹配的公共属性的对象(如果找到的话);否则为 null

实现

例外

找到多个具有指定名称且与指定自变量类型匹配的属性。

name 上声明的默认值为 null

  • 或 - types 上声明的默认值为 null

types 是多维的。

types 的元素为 null

示例

下面的示例检索用户定义类的 对象,检索该类的 属性,并显示由传递给 的参数指定的属性的属性 Type 名称和类型 GetProperty

using namespace System;
using namespace System::Reflection;
ref class MyClass1
{
private:
   array<int, 2>^myArray;

public:

   property int Item [int, int]
   {

      // Declare an indexer.
      int get( int i, int j )
      {
         return myArray[ i,j ];
      }

      void set( int i, int j, int value )
      {
         myArray[ i,j ] = value;
      }

   }

};

int main()
{
   try
   {
      
      // Get the Type object.
      Type^ myType = MyClass1::typeid;
      array<Type^>^myTypeArr = gcnew array<Type^>(2);
      
      // Create an instance of a Type array.
      myTypeArr->SetValue( int::typeid, 0 );
      myTypeArr->SetValue( int::typeid, 1 );
      
      // Get the PropertyInfo object for the indexed property Item, which has two integer parameters.
      PropertyInfo^ myPropInfo = myType->GetProperty( "Item", myTypeArr );
      
      // Display the property.
      Console::WriteLine( "The {0} property exists in MyClass1.", myPropInfo );
   }
   catch ( NullReferenceException^ e ) 
   {
      Console::WriteLine( "An exception occurred." );
      Console::WriteLine( "Source : {0}", e->Source );
      Console::WriteLine( "Message : {0}", e->Message );
   }

}

using System;
using System.Reflection;
class MyClass1
{
    private int [,] myArray = {{1,2},{3,4}};
    // Declare an indexer.
    public int this [int i,int j]
    {
        get
        {
            return myArray[i,j];
        }
        set
        {
            myArray[i,j] = value;
        }
    }
}
public class MyTypeClass
{
    public static void Main(string[] args)
    {
        try
        {
            // Get the Type object.
            Type myType=typeof(MyClass1);
            Type[] myTypeArr = new Type[2];
            // Create an instance of a Type array.
            myTypeArr.SetValue(typeof(int),0);
            myTypeArr.SetValue(typeof(int),1);
            // Get the PropertyInfo object for the indexed property Item, which has two integer parameters.
            PropertyInfo myPropInfo = myType.GetProperty("Item", myTypeArr);
            // Display the property.
            Console.WriteLine("The {0} property exists in MyClass1.", myPropInfo.ToString());
        }
        catch(NullReferenceException e)
        {
            Console.WriteLine("An exception occurred.");
            Console.WriteLine("Source : {0}" , e.Source);
            Console.WriteLine("Message : {0}" , e.Message);
        }
    }
}
Imports System.Reflection

Module Module1
    Class MyClass1
        Private myArray As Integer(,) = {{1, 2}, {3, 4}}
        ' Declare an indexer.
        Default Public Property Item(ByVal i As Integer, ByVal j As Integer) As Integer
            Get
                Return myArray(i, j)
            End Get
            Set(ByVal Value As Integer)

                myArray(i, j) = Value
            End Set
        End Property
    End Class

    Public Class MyTypeClass
        Public Shared Sub Main()
            Try
                ' Get the Type Object.
                Dim myType As Type = GetType(MyClass1)
                Dim myTypeArr(1) As Type
                ' Create an instance of a Type array.
                myTypeArr.SetValue(GetType(Integer), 0)
                myTypeArr.SetValue(GetType(Integer), 1)
                ' Get the PropertyInfo object for the indexed property Item, which has two integer parameters. 
                Dim myPropInfo As PropertyInfo = myType.GetProperty("Item", myTypeArr)
                ' Display the property.
                Console.WriteLine("The {0} property exists in MyClass1.", myPropInfo.ToString())
            Catch e As NullReferenceException
                Console.WriteLine("An exception occurred.")
                Console.WriteLine("Source : {0}", e.Source.ToString())
                Console.WriteLine("Message : {0}", e.Message.ToString())
            End Try
        End Sub
    End Class
End Module 'Module1

注解

如果属性具有至少一个公共访问器,则该属性被视为对反射的公共访问器。 否则,属性被视为私有,并且必须使用 BindingFlags.NonPublic BindingFlags.Instance || (中的 Visual Basic,使用) 合并 BindingFlags.Static 值才能 Or 获取它。

搜索 name 区分大小写。 搜索包括公共静态和公共实例属性。

如果当前 Type 表示构造的泛型类型,则此方法返回 ,类型参数 PropertyInfo 替换为相应的类型参数。

如果当前 表示泛型类型或泛型方法的定义中的类型参数,则此方法将搜索类 Type 约束的属性。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 简化了用于访问索引属性的语法,并允许一个索引属性成为其类型的默认值。 例如,如果 变量引用 ,则 (中的语法Visual Basic) 检索索引 myList ArrayListmyList[3] myList(3) 3 的元素。 可以重载 属性。

在 C# 中,此功能称为索引器,不能按名称引用。 默认情况下,C# 索引器在元数据中显示为名为"Item"的索引属性。 但是,类库开发人员可以使用 IndexerNameAttribute 属性更改元数据中索引器的名称。 例如, String 类有一个名为 的索引器 Chars[] 。 使用 C# 外的语言创建的索引属性也可以具有除 Item 外的名称。

若要确定类型是否具有默认属性,请使用 GetCustomAttributes(Type, Boolean) 方法测试 DefaultMemberAttribute 属性。 如果类型具有 DefaultMemberAttributeMemberName 则 属性返回默认属性的名称。

另请参阅

适用于

GetProperty(String, Type, Type[])

搜索其参数与指定自变量类型匹配的指定公共属性。

public:
 System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ types);
public:
 virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ types);
public System.Reflection.PropertyInfo? GetProperty (string name, Type? returnType, Type[] types);
public System.Reflection.PropertyInfo GetProperty (string name, Type returnType, Type[] types);
member this.GetProperty : string * Type * Type[] -> System.Reflection.PropertyInfo
abstract member GetProperty : string * Type * Type[] -> System.Reflection.PropertyInfo
override this.GetProperty : string * Type * Type[] -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, returnType As Type, types As Type()) As PropertyInfo

参数

name
String

包含要获取的公共属性名的字符串。

returnType
Type

属性的返回类型。

types
Type[]

一个 Type 对象数组,表示要获取的索引属性的参数的数目、顺序和类型。

  • 或 - 获取未被索引的属性的 Type 类型的空数组(即 Type[] types = new Type[0])。

返回

PropertyInfo

表示其参数与指定参数类型匹配的公共属性的对象(如果找到的话);否则为 null

实现

例外

找到多个具有指定名称且与指定自变量类型匹配的属性。

name 上声明的默认值为 null

  • 或 - types 上声明的默认值为 null

types 是多维的。

types 的元素为 null

注解

如果属性具有至少一个公共访问器,则该属性被视为对反射的公共访问器。 否则,属性被视为私有,并且必须使用 BindingFlags.NonPublic BindingFlags.Instance || (中的 Visual Basic,使用) 合并 BindingFlags.Static 值才能 Or 获取它。

搜索 name 区分大小写。 搜索包括公共静态和公共实例属性。

如果当前 Type 表示构造的泛型类型,则此方法返回 ,类型参数 PropertyInfo 替换为相应的类型参数。

如果当前 表示泛型类型或泛型方法的定义中的类型参数,则此方法将搜索类 Type 约束的属性。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 简化了用于访问索引属性的语法,并允许一个索引属性成为其类型的默认值。 例如,如果 变量引用 ,则 (中的语法Visual Basic) 检索索引 myList ArrayListmyList[3] myList(3) 3 的元素。 可以重载 属性。

在 C# 中,此功能称为索引器,不能按名称引用。 默认情况下,C# 索引器在元数据中显示为名为"Item"的索引属性。 但是,类库开发人员可以使用 IndexerNameAttribute 属性更改元数据中索引器的名称。 例如, String 类有一个名为 的索引器 Chars[] 。 使用 C# 外的语言创建的索引属性也可以具有除 Item 外的名称。

若要确定类型是否具有默认属性,请使用 GetCustomAttributes(Type, Boolean) 方法测试 DefaultMemberAttribute 属性。 如果类型具有 DefaultMemberAttributeMemberName 则 属性返回默认属性的名称。

另请参阅

适用于

GetProperty(String, Type, Type[], ParameterModifier[])

搜索其参数与指定自变量类型及修饰符匹配的指定公共属性。

public:
 System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
public:
 virtual System::Reflection::PropertyInfo ^ GetProperty(System::String ^ name, Type ^ returnType, cli::array <Type ^> ^ types, cli::array <System::Reflection::ParameterModifier> ^ modifiers);
public System.Reflection.PropertyInfo? GetProperty (string name, Type? returnType, Type[] types, System.Reflection.ParameterModifier[]? modifiers);
public System.Reflection.PropertyInfo GetProperty (string name, Type returnType, Type[] types, System.Reflection.ParameterModifier[] modifiers);
member this.GetProperty : string * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
abstract member GetProperty : string * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
override this.GetProperty : string * Type * Type[] * System.Reflection.ParameterModifier[] -> System.Reflection.PropertyInfo
Public Function GetProperty (name As String, returnType As Type, types As Type(), modifiers As ParameterModifier()) As PropertyInfo

参数

name
String

包含要获取的公共属性名的字符串。

returnType
Type

属性的返回类型。

types
Type[]

一个 Type 对象数组,表示要获取的索引属性的参数的数目、顺序和类型。

  • 或 - 获取未被索引的属性的 Type 类型的空数组(即 Type[] types = new Type[0])。
modifiers
ParameterModifier[]

ParameterModifier 对象的数组,表示与 types 数组中的相应元素关联的特性。 默认的联编程序不处理此参数。

返回

PropertyInfo

表示符合指定要求的公共属性的对象(如果找到的话);否则为 null

实现

例外

找到多个具有指定名称且与指定参数类型和修饰符匹配的属性。

name 上声明的默认值为 null

  • 或 - types 上声明的默认值为 null

types 是多维的。

  • 或 - modifiers 是多维的。

  • 或 - typesmodifiers 的长度不相同。

types 的元素为 null

示例

下面的示例获取与 对应的 对象,并且使用传递给 方法的参数检索此类的 Type MyPropertyClass 索引 GetProperty 属性。

using namespace System;
using namespace System::Reflection;
public ref class MyPropertyClass
{
private:
   array<int, 2>^ myPropertyArray;

public:

   property int Item [int, int]
   {
      // Declare an indexer.
      int get( int i, int j )
      {
         return myPropertyArray[ i,j ];
      }

      void set( int i, int j, int value )
      {
         myPropertyArray[ i,j ] = value;
      }

   }

};

int main()
{
   try
   {
      Type^ myType = MyPropertyClass::typeid;
      array<Type^>^myTypeArray = gcnew array<Type^>(2);
      
      // Create an instance of the Type array representing the number, order
      // and type of the parameters for the property.
      myTypeArray->SetValue( int::typeid, 0 );
      myTypeArray->SetValue( int::typeid, 1 );
      
      // Search for the indexed property whose parameters match the
      // specified argument types and modifiers.
      PropertyInfo^ myPropertyInfo = myType->GetProperty( "Item", int::typeid, myTypeArray, nullptr );
      Console::WriteLine( "{0}.{1} has a property type of {2}", myType->FullName, myPropertyInfo->Name, myPropertyInfo->PropertyType );
   }
   catch ( Exception^ ex ) 
   {
      Console::WriteLine( "An exception occurred {0}", ex->Message );
   }

}
using System;
using System.Reflection;
public class MyPropertyClass
{
    private int [,] myPropertyArray = new int[10,10];
    // Declare an indexer.
    public int this [int i,int j]
    {
        get
        {
            return myPropertyArray[i,j];
        }
        set
        {
            myPropertyArray[i,j] = value;
        }
    }
}
public class MyTypeClass
{
    public static void Main()
    {
        try
        {
            Type myType=typeof(MyPropertyClass);
            Type[] myTypeArray = new Type[2];
            // Create an instance of the Type array representing the number, order
            // and type of the parameters for the property.
            myTypeArray.SetValue(typeof(int),0);
            myTypeArray.SetValue(typeof(int),1);
            // Search for the indexed property whose parameters match the
            // specified argument types and modifiers.
            PropertyInfo myPropertyInfo = myType.GetProperty("Item",
                typeof(int),myTypeArray,null);
            Console.WriteLine(myType.FullName + "." + myPropertyInfo.Name +
                " has a property type of " + myPropertyInfo.PropertyType);
         }
        catch(Exception ex)
        {
            Console.WriteLine("An exception occurred " + ex.Message);
        }
    }
}
Imports System.Reflection

Public Class MyPropertyClass
    Private myPropertyArray(9, 9) As Integer
    ' Declare an indexer.
    Default Public Property Item(ByVal i As Integer, ByVal j As Integer) As Integer
        Get
            Return myPropertyArray(i, j)
        End Get
        Set(ByVal Value As Integer)
            myPropertyArray(i, j) = Value
        End Set
    End Property
End Class

Public Class MyTypeClass
    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType(MyPropertyClass)
            Dim myTypeArray(1) As Type
            ' Create an instance of a Type array representing the number, order 
            ' and type of the parameters for the property.
            myTypeArray.SetValue(GetType(Integer), 0)
            myTypeArray.SetValue(GetType(Integer), 1)
            ' Search for the indexed property whose parameters match the
            ' specified argument types and modifiers.
            Dim myPropertyInfo As PropertyInfo = myType.GetProperty("Item", _
                  GetType(Integer), myTypeArray, Nothing)
            Console.WriteLine(myType.FullName + "." + myPropertyInfo.Name + _
                  " has a property  type of " + myPropertyInfo.PropertyType.ToString())
        Catch ex As Exception
            Console.WriteLine("An exception occurred " + ex.Message.ToString())
        End Try
    End Sub
End Class

注解

如果属性具有至少一个公共访问器,则该属性被视为对反射的公共访问器。 否则,属性被视为私有,并且必须使用 || (Visual Basic,使用) 合并值才能 BindingFlags.NonPublic BindingFlags.Instance BindingFlags.Static Or 获取它。

尽管默认联编程序不 (参数) ,但可以使用抽象类编写处理 的 ParameterModifier modifiers System.Reflection.Binder 自定义联编程序 modifiersParameterModifier 仅在通过 COM 互操作调用 时使用,并且仅处理通过引用传递的参数。

搜索 name 区分大小写。 搜索包括公共静态和公共实例属性。

如果当前 Type 表示构造的泛型类型,则此方法返回 ,类型参数 PropertyInfo 替换为相应的类型参数。

如果当前 表示泛型类型或泛型方法的定义中的类型参数,则此方法将搜索类 Type 约束的属性。

索引器和默认属性

Visual Basic 2005、Visual C# 2005 和 Visual C++ 2005 简化了用于访问索引属性的语法,并允许一个索引属性成为其类型的默认值。 例如,如果 变量引用 ,则 (中的语法Visual Basic) 检索索引 myList ArrayListmyList[3] myList(3) 3 的元素。 可以重载 属性。

在 C# 中,此功能称为索引器,不能按名称引用。 默认情况下,C# 索引器在元数据中显示为名为"Item"的索引属性。 但是,类库开发人员可以使用 IndexerNameAttribute 属性更改元数据中索引器的名称。 例如, String 类有一个名为 的索引器 Chars[] 。 使用 C# 外的语言创建的索引属性也可以具有除 Item 外的名称。

若要确定类型是否具有默认属性,请使用 GetCustomAttributes(Type, Boolean) 方法测试 DefaultMemberAttribute 属性。 如果类型具有 DefaultMemberAttributeMemberName 则 属性返回默认属性的名称。

另请参阅

适用于