PropertyInfo.GetValue PropertyInfo.GetValue PropertyInfo.GetValue PropertyInfo.GetValue Method

定義

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

オーバーロード

GetValue(Object) GetValue(Object) GetValue(Object) GetValue(Object)

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

GetValue(Object, Object[]) GetValue(Object, Object[]) GetValue(Object, 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) GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) 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) GetValue(Object) GetValue(Object) GetValue(Object)

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

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

パラメーター

obj
Object Object Object Object

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

戻り値

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

次の例ではPlanet Name、という2つのプロパティを持つクラスを定義して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 nullパラメーターをにnull設定し、をに設定し、インデックス値のオブジェクト配列をに設定して、抽象メソッドの実装を提供する便利なメソッドです。 Binderおよびをにnull設定します。CultureInfoThis 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[]) GetValue(Object, Object[]) GetValue(Object, Object[]) 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);
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 Object Object 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.

戻り値

指定されたオブジェクトのプロパティの値。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.

Windows ストア アプリ用 .NET またはポータブル クラス ライブラリでは、Exception を代わりにキャッチします。In the .NET for Windows Store apps or the Portable Class Library, catch Exception instead.

オブジェクトがターゲット型と一致しません。あるいは、プロパティはインスタンス プロパティですが 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.

Windows ストア アプリ用 .NET またはポータブル クラス ライブラリでは、基本クラスの例外である MemberAccessException を代わりにキャッチします。In the .NET for Windows Store apps or the Portable Class Library, catch the base class exception, MemberAccessException, instead.

クラス内のプライベート メソッドまたは保護されたメソッドへの正しくないアクセスが試行されました。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クラスの既定のプロパティ (のC#インデクサー) です。 String.Chars[Int32]The String.Chars[Int32] 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 null CultureInfo nullパラメーターを指定し、をに設定し、をに設定して、抽象メソッドの実装を提供する便利なメソッドです。Binder DefaultThis 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. から、 PropertyInfoを取得します。 TypeFrom the Type, get the PropertyInfo. から、 GetValueメソッドを使用します。 PropertyInfoFrom the PropertyInfo, use the GetValue method.

注意

以降では、このメソッドを使用して、呼び出し元がReflectionPermissionFlag.RestrictedMemberAccessフラグで許可ReflectionPermissionされていて、非パブリックメンバーの許可セットが呼び出し元の許可セットまたはサブセットに制限されている場合に、非パブリックメンバーにアクセスできます。 .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1著作.Starting with the .NET Framework 2.0 Service Pack 1.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.NET Framework 3.5 以降を対象とする必要があります。To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

セキュリティ

ReflectionPermission
などの機構をInvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])使用して遅延バインディングが呼び出された場合。when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). MemberAccess (関連する列挙体)Associated enumeration: MemberAccess.

GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) 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);
abstract member GetValue : obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj

パラメーター

obj
Object Object Object Object

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

invokeAttr
BindingFlags BindingFlags BindingFlags 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 Binder 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 CultureInfo CultureInfo 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.

戻り値

指定されたオブジェクトのプロパティの値。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. から、 PropertyInfoを取得します。 TypeFrom the Type, get the PropertyInfo. から、 GetValueメソッドを使用します。 PropertyInfoFrom the PropertyInfo, use the GetValue method.

注意

以降では、このメソッドを使用して、呼び出し元がReflectionPermissionFlag.RestrictedMemberAccessフラグで許可ReflectionPermissionされていて、非パブリックメンバーの許可セットが呼び出し元の許可セットまたはサブセットに制限されている場合に、非パブリックメンバーにアクセスできます。 .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1著作.Starting with the .NET Framework 2.0 Service Pack 1.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.NET Framework 3.5 以降を対象とする必要があります。To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

セキュリティ

ReflectionPermission
などの機構をInvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])使用して遅延バインディングが呼び出された場合。when invoked late-bound through mechanisms such as InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]). MemberAccess (関連する列挙体)Associated enumeration: MemberAccess.

こちらもご覧ください

適用対象