次の方法で共有


Type.GetProperty メソッド (String, BindingFlags)

指定したバインディング制約を使用して、指定したプロパティを検索します。

Overloads Public Overridable Function GetProperty( _
   ByVal name As String, _   ByVal bindingAttr As BindingFlags _) As PropertyInfo Implements IReflect.GetProperty
[C#]
public virtual PropertyInfo GetProperty(stringname,BindingFlagsbindingAttr);
[C++]
public: virtual PropertyInfo* GetProperty(String* name,BindingFlagsbindingAttr);
[JScript]
public function GetProperty(
   name : String,bindingAttr : BindingFlags) : PropertyInfo;

パラメータ

  • name
    取得するプロパティの名前を格納している String

  • bindingAttr
    検索の実行方法を指定する 1 つ以上の BindingFlags から成るビット マスク。

    または

    null 参照 (Visual Basic では Nothing) を返す 0。

戻り値

指定した要件と一致するプロパティが存在する場合は、そのプロパティを表す PropertyInfo オブジェクト。それ以外の場合は null 参照 (Visual Basic では Nothing) 。

実装

IReflect.GetProperty

例外

例外の種類 条件
AmbiguousMatchException 指定した名前を持ち、指定したバインディング制約に一致するプロパティが 2 つ以上存在します。
ArgumentNullException name が null 参照 (Visual Basic では Nothing) です。

解説

types 配列と modifiers 配列の長さが同じです。types 配列で指定するパラメータには、 modifiers 配列で指定されている pdIn、pdOut、pdLcid、pdRetval、pdOptional、pdHasDefault の各属性を設定できます。これらの属性は、それぞれ [In]、[Out]、[lcid]、[retval]、[optional]、およびパラメータが既定値を持つかどうかを指定する値を表します。パラメータに関連付けられた属性はメタデータに格納され、相互運用性を拡張します。

次の BindingFlags フィルタ フラグは、検索対象に含めるプロパティを定義するために使用できます。

  • 戻り値を取得するには、 BindingFlags.Instance または BindingFlags.Static のいずれかを指定する必要があります。
  • 検索対象にパブリック プロパティを含めるための BindingFlags.Public を指定します。
  • 検索対象にパブリックではないプロパティ (つまり、プライベート プロパティやプロテクト プロパティ) を含めるための BindingFlags.NonPublic を指定します。
  • 階層構造の上位にある静的プロパティを含めるための BindingFlags.FlattenHierarchy を指定します。

次の BindingFlags 修飾フラグは、検索方法を変更するために使用できます。

  • name の大文字と小文字の違いを無視する場合は BindingFlags.IgnoreCase
  • 単に継承されただけのプロパティではなく、 Type で宣言されたプロパティだけを検索する場合は BindingFlags.DeclaredOnly

詳細については、「 System.Reflection.BindingFlags 」を参照してください。

要求された型がパブリックではなく、呼び出し元に現在のアセンブリ外の非パブリック オブジェクトをリフレクションするための ReflectionPermission がない場合、このメソッドは null 参照 (Visual Basic では Nothing) を返します。

使用例

[Visual Basic, C#, C++] ユーザー定義クラスの型オブジェクトと、そのクラスのプロパティを取得して、指定したバインディング制約に一致するプロパティ名を表示する例を次に示します。

 

Imports System
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 'Main
    End Class 'MyClass1
End Module 'Module1

[C#] 

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

[C++] 

#using <mscorlib.dll>

using namespace System;
using namespace System::Reflection;

__gc class MyClass {
private:
   int  myProperty;
   // Declare MyProperty.
public:
   __property int get_MyProperty() {
      return myProperty;
   }
   __property void set_MyProperty(int value) {
      myProperty=value;
   }
};

int main() {

   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(S"MyProperty", static_cast<BindingFlags>(BindingFlags::Public | BindingFlags::Instance));
      // Display Name propety to console.
      Console::WriteLine(S"{0} is a property of MyClass.", myPropInfo->Name);
   } catch (NullReferenceException* e) {
      Console::WriteLine(S"MyProperty does not exist in MyClass. {0}", e->Message);
   }
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

Type クラス | Type メンバ | System 名前空間 | Type.GetProperty オーバーロードの一覧 | PropertyInfo | String | BindingFlags | DefaultBinder | ReflectionPermission | GetPropertyImpl | GetProperties