エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Type.GetProperty メソッド (String)

2013/12/12

指定した名前のパブリック プロパティを検索します。

Namespace:  System
アセンブリ:  mscorlib (mscorlib.dll 内)

public PropertyInfo GetProperty(
	string name
)

パラメーター

name
型: System.String
取得するパブリック プロパティの名前を格納している String

戻り値

型: System.Reflection.PropertyInfo
指定した名前のパブリック プロパティが見つかった場合は、そのプロパティを表す PropertyInfo オブジェクト。それ以外の場合は null

例外条件
AmbiguousMatchException

指定した名前のプロパティが 2 つ以上見つかりました。「注釈」を参照してください。

ArgumentNullException

namenull です。

name の検索では大文字と小文字が区別されます。検索には、public static および public のインスタンス プロパティが含まれます。

パブリックなアクセサーが少なくとも 1 つはあるプロパティは、リフレクションに対してパブリックであると見なされます。それ以外の場合、プロパティはプライベートと見なされ、BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static (Visual Basic では Or を使用して値を組み合わせる) を使用して取得する必要があります。

現在の Type が構築ジェネリック型を表している場合、このメソッドは、型パラメーターを適切な型の引数で置き換えて PropertyInfo を返します。

現在の Type がジェネリック型またはジェネリック メソッドの定義の型パラメーターを表している場合、このメソッドはクラス制約のプロパティを検索します。

AmbiguousMatchException が発生する状況の例を次に示します。

  • 型に、同じ名前であるがパラメーターの数が異なる 2 つのインデックス付きプロパティが含まれている。あいまいさを解決するには、GetProperty メソッドのオーバーロードを使用してパラメーター型を指定します。

  • 派生型に、継承されたプロパティを参照できなくするプロパティが、new (Visual Basic では Shadows) 修飾子を使用して同じ名前で宣言されている。あいまいさを解決するには、GetProperty(String, BindingFlags) メソッド オーバーロードを使用し、継承されていないメンバーに対する検索を絞り込むために BindingFlags.DeclaredOnly を指定します。

インデクサーと既定のプロパティ

Visual Basic 2005、Visual C# 2005、および Visual C++ 2005 は、インデックス付きプロパティにアクセスするための簡略化された構文を持っており、1 つのインデックス付きプロパティをその型の既定値とすることができます。たとえば、変数 myListList<T> を参照する場合、構文 myList[3] (Visual Basic では myList(3)) はインデックスが 3 である要素を取得します。プロパティはオーバーロードすることができます。

C# の場合、この機能はインデクサーと呼ばれ、名前によって参照できません。既定では、C# インデクサーは "Item" という名前のインデックス付きプロパティとしてメタデータ内に出現します。ただし、クラス ライブラリ開発者は、IndexerNameAttribute 属性を使用して、メタデータ内のインデクサーの名前を変更することができます。たとえば、String クラスには Chars という名前のインデクサーがあります。C# 以外の言語を使用して作成されたインデックス付きプロパティには "Item" 以外の名前を付けることができます。

型に既定のプロパティがあるかどうかを判断するには、GetCustomAttributes(Type, Boolean) メソッドを使用して、DefaultMemberAttribute 属性をテストします。型が DefaultMemberAttribute を持っている場合、MemberName プロパティは既定のプロパティの名前を返します。

ユーザー定義クラスの Type オブジェクトと、そのクラスのプロパティを取得して、プロパティ名を表示する例を次に示します。

メモメモ:

この例を実行するには、「Windows Phone での静的 TextBlock コントロールのあるコード例のビルド」を参照してください。



using System;
using System.Reflection;

class MyClass
{
   private int myProperty;
   // Declare MyProperty.
   public int MyProperty
   {
      get
      {
         return myProperty;
      }
      set
      {
         myProperty = value;
      }
   }
}
public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      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.
         outputBlock.Text += String.Format("The {0} property exists in MyClass.", myPropInfo.Name) + "\n";
      }
      catch (NullReferenceException e)
      {
         outputBlock.Text += "The property does not exist in MyClass." + e.Message + "\n";
      }
   }
}


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示:
© 2015 Microsoft