英語で読む

次の方法で共有


Type.GetProperties メソッド

定義

現在の Type のプロパティを取得します。

オーバーロード

GetProperties()

現在の Type のすべてのパブリック プロパティを返します。

GetProperties(BindingFlags)

派生クラスによってオーバーライドされた場合、指定したバインディング制約を使用して、現在の Type のプロパティを検索します。

GetProperties()

ソース:
Type.cs
ソース:
Type.cs
ソース:
Type.cs

現在の Type のすべてのパブリック プロパティを返します。

C#
public System.Reflection.PropertyInfo[] GetProperties();

戻り値

現在の PropertyInfo のすべてのパブリック プロパティを表す Type オブジェクトの配列。

または

現在の PropertyInfo にパブリック プロパティが存在しない場合は、Type 型の空の配列。

実装

GetProperties メソッドの使用例を次に示します。

C#
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());
}

注釈

このオーバーロードの呼び出しは、C# および Visual Basic で と等しい引数を使用bindingAttrしてオーバーロードをBindingFlags.Instance | BindingFlags.Static | BindingFlags.Public呼び出すことGetProperties(BindingFlags)BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.Public同じです。 現在 Type のオブジェクトで表される型によって定義されたものと、その基本型から継承されたものの両方で、すべてのパブリック インスタンスと静的プロパティが返されます。

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

.NET 6 以前のバージョンでは、 GetProperties メソッドはアルファベット順や宣言順序などの特定の順序でプロパティを返しません。 その順序は異なるため、コードはプロパティが返される順序に依存してはなりません。 ただし、.NET 7 以降では、順序付けはアセンブリ内のメタデータの順序に基づいて決定論的です。

次の表は、型に反映するときに、 メソッドによって Get 返される基底クラスのメンバーを示しています。

メンバーの型 静的 非静的
コンストラクター いいえ いいえ
フィールド いいえ はい。 フィールドは常に名前と署名で非表示になります。
Event 適用なし 一般的な型システムルールは、継承が プロパティを実装するメソッドと同じであるということです。 リフレクションでは、プロパティが名前と署名による非表示として扱われます。 以下の注 2 を参照してください。
メソッド いいえ はい。 メソッド (仮想と非仮想の両方) には、名前による非表示または名前と署名による非表示を指定できます。
入れ子になった型 いいえ いいえ
プロパティ 適用なし 一般的な型システムルールは、継承が プロパティを実装するメソッドと同じであるということです。 リフレクションでは、プロパティが名前と署名による非表示として扱われます。 以下の注 2 を参照してください。
  1. 名前と署名による非表示では、カスタム修飾子、戻り値の型、パラメーター型、sentinel、アンマネージド呼び出し規則など、署名のすべての部分が考慮されます。 これはバイナリ比較です。

  2. リフレクションの場合、プロパティとイベントは名前と署名による非表示になります。 基底クラスに get アクセサーと set アクセサーの両方を持つプロパティがあるが、派生クラスに get アクセサーのみが含まれている場合、派生クラス プロパティは基底クラス プロパティを非表示にし、基底クラスのセッターにアクセスすることはできません。

  3. カスタム属性は、共通型システムの一部ではありません。

現在 Type の が構築されたジェネリック型を表す場合、このメソッドは、適切な型引数に置き換えられた型パラメーターを持つオブジェクトを返 PropertyInfo します。

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

こちらもご覧ください

適用対象

.NET 10 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetProperties(BindingFlags)

ソース:
Type.cs
ソース:
Type.cs
ソース:
Type.cs

派生クラスによってオーバーライドされた場合、指定したバインディング制約を使用して、現在の Type のプロパティを検索します。

C#
public abstract System.Reflection.PropertyInfo[] GetProperties(System.Reflection.BindingFlags bindingAttr);

パラメーター

bindingAttr
BindingFlags

検索を実施する方法を指定する列挙値のビットごとの組み合わせ。

または

空の配列を返す場合は Default

戻り値

現在の Type のプロパティのうち、指定したバインディング制約に一致するすべてのプロパティを表すオブジェクトの配列。

または

現在の PropertyInfo にプロパティが設定されていないか、またはプロパティの中でバインディング制約に一致するものが存在しない場合は、Type 型の空の配列。

実装

次の例では、6 つのプロパティを含む という名前 PropertyClass のクラスを定義します。2 つはパブリック、1 つはプライベート、1 つは保護済み、1 つは内部 (Friend Visual Basic の場合)、1 つは内部 ( Visual Basic では )Protected Friend で保護されています。 その後、指定されたバインド制約に一致するプロパティの基本的なプロパティ情報 (プロパティの名前と型、読み取り/書き込みかどうか、およびアクセサ get ーと set アクセサーの可視性) が表示されます。

C#
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

注釈

オーバーロードがGetProperties(BindingFlags)プロパティ情報を正常に取得するには、引数に bindingAttr と の少なくとも 1 つとBindingFlags.InstanceBindingFlags.Static、 と のBindingFlags.NonPublicBindingFlags.Public少なくとも 1 つを含める必要があります。

BindingFlags のフィルター フラグを使用して、検索に含めるプロパティを定義できます。

  • インスタンス メソッドを含めるには、 を指定 BindingFlags.Instance します。

  • 静的メソッドを含めるには、 を指定 BindingFlags.Static します。

  • 検索にパブリック プロパティを含めるには、 を指定 BindingFlags.Public します。 プロパティは、少なくとも 1 つのアクセサーがパブリックである場合、リフレクションに対してパブリックと見なされます。

  • 非パブリック プロパティ (プライベート、内部、保護されたプロパティ) を検索に含める場合は、 を指定 BindingFlags.NonPublic します。 基本クラスの保護されたプロパティと内部プロパティのみが返されます。基底クラスのプライベート プロパティは返されません。

  • 階層に含める静的メンバーとprotected静的メンバーを指定BindingFlags.FlattenHierarchypublicしますprivate。継承されたクラスの静的メンバーは含まれません。

  • PropertyInfoの配列を返すには、単独で を指定BindingFlags.Defaultします。

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

  • BindingFlags.DeclaredOnly で宣言されたプロパティのみを検索する場合は Type。単に継承されたプロパティは検索されません。

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

.NET 6 以前のバージョンでは、 GetProperties メソッドはアルファベット順や宣言順序などの特定の順序でプロパティを返しません。 その順序は異なるため、コードはプロパティが返される順序に依存してはなりません。 ただし、.NET 7 以降では、順序付けはアセンブリ内のメタデータの順序に基づいて決定論的です。

現在 Type の が構築されたジェネリック型を表す場合、このメソッドは、適切な型引数に置き換えられた型パラメーターを持つオブジェクトを返 PropertyInfo します。

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

こちらもご覧ください

適用対象

.NET 10 およびその他のバージョン
製品 バージョン
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1