PropertyInfo.GetValue メソッド

定義

指定されたオブジェクトのプロパティ値を返します。Returns the property value of a specified object.

オーバーロード

GetValue(Object)

指定されたオブジェクトのプロパティの値を返します。Returns the property value of a specified object.

GetValue(Object, Object[])

指定したオブジェクトのプロパティの値を返します。インデックス付きプロパティの場合は、オプションでインデックス値を設定できます。Returns the property value of a specified object with optional index values for indexed properties.

GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)

派生クラスでオーバーライドされると、指定したバインディング、インデックス、およびカルチャ固有の情報を含む指定されたオブジェクトのプロパティ値を返します。When overridden in a derived class, returns the property value of a specified object that has the specified binding, index, and culture-specific information.

GetValue(Object)

指定されたオブジェクトのプロパティの値を返します。Returns the property value of a specified object.

public:
 System::Object ^ GetValue(System::Object ^ obj);
public object GetValue (object obj);
public object? GetValue (object? obj);
member this.GetValue : obj -> obj
Public Function GetValue (obj As Object) As Object

パラメーター

obj
Object

プロパティ値が返されるオブジェクト。The object whose property value will be returned.

戻り値

Object

指定されたオブジェクトのプロパティの値。The property value of the specified object.

次の例では Planet 、という2つのプロパティを持つクラスを定義しています。地球の Name 名前と地球 Distance からの距離です。The following example defines a Planet class that has two properties: Name, the name of the planet; and Distance, the planet's distance from Earth. この例では、 Planet 地球の木星を表すオブジェクトをインスタンス化し、 GetPropertyValues プロパティに関する情報を表示するメソッドに渡して、メソッドを使用して GetValue 各プロパティの値を取得し Planet ます。The example instantiates a Planet object that represents the planet Jupiter and passes it to a GetPropertyValues method that displays information about the properties and uses the GetValue method to get the value of each Planet property.

using System;
using System.Reflection;

public class Planet
{
   private String planetName;
   private Double distanceFromEarth;
   
   public Planet(String name, Double distance)
   {
      planetName = name;
      distanceFromEarth = distance;
   } 

   public String Name
   { get { return planetName; } }
   
   public Double Distance 
   { get { return distanceFromEarth; }
     set { distanceFromEarth = value; } }
}

public class Example
{
   public static void Main()
   {
      Planet jupiter = new Planet("Jupiter", 3.65e08);
      GetPropertyValues(jupiter);
   }
   
   private static void GetPropertyValues(Object obj)
   {
      Type t = obj.GetType();
      Console.WriteLine("Type is: {0}", t.Name);
      PropertyInfo[] props = t.GetProperties();
      Console.WriteLine("Properties (N = {0}):", 
                        props.Length);
      foreach (var prop in props)
         if (prop.GetIndexParameters().Length == 0)
            Console.WriteLine("   {0} ({1}): {2}", prop.Name,
                              prop.PropertyType.Name,
                              prop.GetValue(obj));
         else
            Console.WriteLine("   {0} ({1}): <Indexed>", prop.Name,
                              prop.PropertyType.Name);
   }
}
// The example displays the following output:
//       Type is: Planet
//       Properties (N = 2):
//          Name (String): Jupiter
//          Distance (Double): 365000000
Imports System.Reflection

Public Class Planet
   Private planetName As String
   Private distanceFromEarth As Double
   
   Public Sub New(name As String, distance As Double)
      planetName = name
      distanceFromEarth = distance
   End Sub 

   Public ReadOnly Property Name As String
      Get
         Return planetName
      End Get
   End Property
   
   Public Property Distance As Double
      Get
         Return distanceFromEarth
      End Get
      Set
         distanceFromEarth = value
      End Set
   End Property
End Class

Module Example
   Public Sub Main()
      Dim jupiter As New Planet("Jupiter", 3.65e08)
      GetPropertyValues(jupiter)
   End Sub
   
   Private Sub GetPropertyValues(obj As Object)
      Dim t As Type = obj.GetType()
      Console.WriteLine("Type is: {0}", t.Name)
      Dim props() As PropertyInfo = t.GetProperties()
      Console.WriteLine("Properties (N = {0}):", 
                        props.Length)
      For Each prop In props
         If prop.GetIndexParameters().Length = 0 Then
            Console.WriteLine("   {0} ({1}): {2}", prop.Name,
                              prop.PropertyType.Name,
                              prop.GetValue(obj))
         Else
            Console.WriteLine("   {0} ({1}): <Indexed>", prop.Name,
                              prop.PropertyType.Name)
         End If                  
      Next                         
   End Sub
End Module
' The example displays the following output:
'       Type is: Planet
'       Properties (N = 2):
'          Name (String): Jupiter
'          Distance (Double): 365000000

注釈

非インデックス化された GetValue(Object) プロパティの値を取得するには、オーバーロードを呼び出します。インデックス付きプロパティの値を取得しようとすると、メソッドは例外をスロー TargetParameterCountException します。You call the GetValue(Object) overload to retrieve the value of a non-indexed property; if you try to retrieve the value of an indexed property, the method throws a TargetParameterCountException exception. メソッドを呼び出すことによって、プロパティのインデックスが作成されているかどうかを判断でき GetIndexParameters ます。You can determine whether a property is indexed or not by calling the GetIndexParameters method. 返された配列の長さ ParameterInfo が0の場合、プロパティにはインデックスが付けられません。If the length of the returned ParameterInfo array is zero, the property is not indexed.

これは、 GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) BindingFlags パラメーターをに設定し、をに設定し、 BindingFlags.Default Binder null インデックス値のオブジェクト配列をに設定し、 null CultureInfo をに設定 null して、抽象メソッドの実装を提供する便利なメソッドです。This is a convenience method that provides an implementation for the abstract GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) method with the BindingFlags parameter set to BindingFlags.Default, the Binder set to null, the object array of index values set to null, and the CultureInfo set to null.

適用対象

GetValue(Object, Object[])

指定したオブジェクトのプロパティの値を返します。インデックス付きプロパティの場合は、オプションでインデックス値を設定できます。Returns the property value of a specified object with optional index values for indexed properties.

public:
 virtual System::Object ^ GetValue(System::Object ^ obj, cli::array <System::Object ^> ^ index);
public virtual object GetValue (object obj, object[] index);
public virtual object? GetValue (object? obj, object?[]? index);
abstract member GetValue : obj * obj[] -> obj
override this.GetValue : obj * obj[] -> obj
Public Overridable Function GetValue (obj As Object, index As Object()) As Object

パラメーター

obj
Object

プロパティ値が返されるオブジェクト。The object whose property value will be returned.

index
Object[]

インデックス付きプロパティのインデックス値 (省略可能)。Optional index values for indexed properties. インデックス付きプロパティのインデックスは 0 から始まります。The indexes of indexed properties are zero-based. インデックス付きでないプロパティの場合は、この値を null にする必要があります。This value should be null for non-indexed properties.

戻り値

Object

指定されたオブジェクトのプロパティの値。The property value of the specified object.

実装

例外

必要な引数の型が index 配列に含まれていません。The index array does not contain the type of arguments needed.

または-or- プロパティの get アクセサーが見つかりません。The property's get accessor is not found.

オブジェクトがターゲット型と一致しません。あるいは、プロパティはインスタンス プロパティですが objnull です。The object does not match the target type, or a property is an instance property but obj is null.

index 内のパラメーターの数が、インデックス付きプロパティが受け取るパラメーターの数と一致していません。The number of parameters in index does not match the number of parameters the indexed property takes.

クラス内のプライベート メソッドまたは保護されたメソッドへの正しくないアクセスが試行されました。There was an illegal attempt to access a private or protected method inside a class.

プロパティ値の取得中にエラーが発生しました。An error occurred while retrieving the property value. たとえば、インデックス付きプロパティに対して指定されたインデックス値が範囲外です。For example, an index value specified for an indexed property is out of range. InnerException プロパティは、エラーの理由を示します。The InnerException property indicates the reason for the error.

次の例は、インデックス付きプロパティの値を取得する方法を示しています。The following example shows how to get the value of an indexed property. プロパティは、 String.Chars[] クラスの既定のプロパティ (C# の場合はインデクサー) です StringThe String.Chars[] property is the default property (the indexer in C#) of the String class.

using System;
using System.Reflection;

class Example
{
    public static void Main()
    {
        string test = "abcdefghijklmnopqrstuvwxyz";

        // Get a PropertyInfo object representing the Chars property.
        PropertyInfo pinfo = typeof(string).GetProperty("Chars");

        // Show the first, seventh, and last letters
        ShowIndividualCharacters(pinfo, test, 0, 6, test.Length - 1);

        // Show the complete string.
        Console.Write("The entire string: ");
        for (int x = 0; x < test.Length; x++)
        {
            Console.Write(pinfo.GetValue(test, new Object[] {x}));
        }
        Console.WriteLine();
    }

    static void ShowIndividualCharacters(PropertyInfo pinfo, 
                                         object value,
                                         params int[] indexes)
    {
       foreach (var index in indexes) 
          Console.WriteLine("Character in position {0,2}: '{1}'",
                            index, pinfo.GetValue(value, new object[] { index }));
       Console.WriteLine();                          
    }                                      
}
// The example displays the following output:
//    Character in position  0: 'a'
//    Character in position  6: 'g'
//    Character in position 25: 'z'
//    
//    The entire string: abcdefghijklmnopqrstuvwxyz
Imports System.Reflection

Module Example
    Sub Main()
        Dim test As String = "abcdefghijklmnopqrstuvwxyz"

        ' Get a PropertyInfo object representing the Chars property.
        Dim pinfo As PropertyInfo = GetType(String).GetProperty("Chars")

        ' Show the first, seventh, and last characters.
        ShowIndividualCharacters(pinfo, test, { 0, 6, test.Length - 1 })

        ' Show the complete string.
        Console.Write("The entire string: ")
        For x As Integer = 0 To test.Length - 1
            Console.Write(pinfo.GetValue(test, { x }))
        Next
        Console.WriteLine()
    End Sub

    Sub ShowIndividualCharacters(pinfo As PropertyInfo, 
                                 value As Object, 
                                 ParamArray indexes() As Integer)
       For Each index In indexes 
          Console.WriteLine("Character in position {0,2}: '{1}'",
                            index, pinfo.GetValue(value, { index }))
       Next
       Console.WriteLine()                          
    End Sub   
End Module
' The example displays the following output:
'       Character in position  0: 'a'
'       Character in position  6: 'g'
'       Character in position 25: 'z'
'       
'       The entire string: abcdefghijklmnopqrstuvwxyz

注釈

プロパティがインデックス付けされているかどうかを判断するには、メソッドを使用し GetIndexParameters ます。To determine whether a property is indexed, use the GetIndexParameters method. 結果の配列の要素が 0 (ゼロ) の場合、プロパティのインデックスは作成されません。If the resulting array has 0 (zero) elements, the property is not indexed.

これは、のパラメーターを指定し、 GetValue BindingFlags Default Binder をに設定し、 null CultureInfo をに設定 null して、抽象メソッドの実装を提供する便利なメソッドです。This is a convenience method that provides an implementation for the abstract GetValue method with a BindingFlags parameter of Default, the Binder set to null, and the CultureInfo set to null.

静的プロパティは、個々のオブジェクトではなく、型に属しているので、オブジェクトの引数としてを渡すことによって静的プロパティを取得し null ます。Because static properties belong to the type, not individual objects, get static properties by passing null as the object argument. たとえば、次のコードを使用して、の静的プロパティを取得し CurrentCulture CultureInfo ます。For example, use the following code to get the static CurrentCulture property of CultureInfo :

PropertyInfo CurCultProp =   
    (typeof(CultureInfo)).GetProperty("CurrentCulture");   
Console.WriteLine("CurrCult: " +  
    CurCultProp.GetValue(null,null));  

メソッドを使用するには GetValue 、まずクラスを取得し Type ます。To use the GetValue method, first get the class Type. から、 Type を取得し PropertyInfo ます。From the Type, get the PropertyInfo. から、 PropertyInfo メソッドを使用し GetValue ます。From the PropertyInfo, use the GetValue method.

注意

.NET Framework 2.0 Service Pack 1 以降では、このメソッドを使用して、呼び出し元がフラグで許可されていて、 ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess 非パブリックメンバーの許可セットが呼び出し元の許可セットまたはサブセットに制限されている場合に、非パブリックメンバーにアクセスできます。Starting with the .NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (「 リフレクションのセキュリティに関する考慮事項」を参照してください)。(See Security Considerations for Reflection.)

この機能を使用するには、アプリケーションで .NET Framework 3.5 以降を対象にする必要があります。To use this functionality, your application should target the .NET Framework 3.5 or later.

適用対象

GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)

派生クラスでオーバーライドされると、指定したバインディング、インデックス、およびカルチャ固有の情報を含む指定されたオブジェクトのプロパティ値を返します。When overridden in a derived class, returns the property value of a specified object that has the specified binding, index, and culture-specific information.

public:
 abstract System::Object ^ GetValue(System::Object ^ obj, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ index, System::Globalization::CultureInfo ^ culture);
public abstract object? GetValue (object? obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object?[]? index, System.Globalization.CultureInfo? culture);
public abstract object GetValue (object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] index, System.Globalization.CultureInfo culture);
abstract member GetValue : obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj
Public MustOverride Function GetValue (obj As Object, invokeAttr As BindingFlags, binder As Binder, index As Object(), culture As CultureInfo) As Object

パラメーター

obj
Object

プロパティ値が返されるオブジェクト。The object whose property value will be returned.

invokeAttr
BindingFlags

呼び出し属性を指定する次の列挙型メンバーのビットごとの組み合わせ: InvokeMethodCreateInstanceStaticGetFieldSetFieldGetPropertySetPropertyA bitwise combination of the following enumeration members that specify the invocation attribute: InvokeMethod, CreateInstance, Static, GetField, SetField, GetProperty, and SetProperty. 適切な呼び出し属性を指定する必要があります。You must specify a suitable invocation attribute. たとえば、静的メンバーを呼び出すには、Static フラグを設定します。For example, to invoke a static member, set the Static flag.

binder
Binder

バインディング、引数型の強制変換、メンバーの呼び出し、およびリフレクションを使用した MemberInfo オブジェクトの取得を有効にするオブジェクト。An object that enables the binding, coercion of argument types, invocation of members, and retrieval of MemberInfo objects through reflection. bindernull の場合は、既定のバインダーが使用されます。If binder is null, the default binder is used.

index
Object[]

インデックス付きプロパティのインデックス値 (省略可能)。Optional index values for indexed properties. インデックス付きでないプロパティの場合は、この値を null にする必要があります。This value should be null for non-indexed properties.

culture
CultureInfo

リソースのローカライズ対象のカルチャ。The culture for which the resource is to be localized. リソースがこのカルチャ用にローカライズされていない場合は、一致する対象を検索するために Parent プロパティが連続して呼び出されます。If the resource is not localized for this culture, the Parent property will be called successively in search of a match. この値が null の場合は、CurrentUICulture プロパティからカルチャ固有の情報が習得されます。If this value is null, the culture-specific information is obtained from the CurrentUICulture property.

戻り値

Object

指定されたオブジェクトのプロパティの値。The property value of the specified object.

実装

例外

必要な引数の型が index 配列に含まれていません。The index array does not contain the type of arguments needed.

または-or- プロパティの get アクセサーが見つかりません。The property's get accessor is not found.

オブジェクトがターゲット型と一致しません。あるいは、プロパティはインスタンス プロパティですが objnull です。The object does not match the target type, or a property is an instance property but obj is null.

index 内のパラメーターの数が、インデックス付きプロパティが受け取るパラメーターの数と一致していません。The number of parameters in index does not match the number of parameters the indexed property takes.

クラス内のプライベート メソッドまたは保護されたメソッドへの正しくないアクセスが試行されました。There was an illegal attempt to access a private or protected method inside a class.

プロパティ値の取得中にエラーが発生しました。An error occurred while retrieving the property value. たとえば、インデックス付きプロパティに対して指定されたインデックス値が範囲外です。For example, an index value specified for an indexed property is out of range. InnerException プロパティは、エラーの理由を示します。The InnerException property indicates the reason for the error.

注釈

プロパティがインデックス付けされているかどうかを判断するには、メソッドを使用し GetIndexParameters ます。To determine whether a property is indexed, use the GetIndexParameters method. 結果の配列の要素が 0 (ゼロ) の場合、プロパティのインデックスは作成されません。If the resulting array has 0 (zero) elements, the property is not indexed.

静的プロパティは、個々のオブジェクトではなく、型に属しているので、オブジェクトの引数としてを渡すことによって静的プロパティを取得し null ます。Because static properties belong to the type, not individual objects, get static properties by passing null as the object argument. たとえば、次のコードを使用して、の静的プロパティを取得し CurrentCulture CultureInfo ます。For example, use the following code to get the static CurrentCulture property of CultureInfo :

PropertyInfo CurCultProp =   
       (typeof(CultureInfo)).GetProperty("CurrentCulture");   
Console.WriteLine("CurrCult: " +  
       CurCultProp.GetValue(null,null));  

メソッドを使用するには GetValue 、まずクラスを取得し Type ます。To use the GetValue method, first get the class Type. から、 Type を取得し PropertyInfo ます。From the Type, get the PropertyInfo. から、 PropertyInfo メソッドを使用し GetValue ます。From the PropertyInfo, use the GetValue method.

注意

.NET Framework 2.0 Service Pack 1 以降では、このメソッドを使用して、呼び出し元がフラグで許可されていて、 ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess 非パブリックメンバーの許可セットが呼び出し元の許可セットまたはサブセットに制限されている場合に、非パブリックメンバーにアクセスできます。Starting with the .NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (「 リフレクションのセキュリティに関する考慮事項」を参照してください)。(See Security Considerations for Reflection.)

この機能を使用するには、アプリケーションで .NET Framework 3.5 以降を対象にする必要があります。To use this functionality, your application should target the .NET Framework 3.5 or later.

こちらもご覧ください

適用対象