PropertyInfo.GetValue メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定されたオブジェクトのプロパティの値を返します。
オーバーロード
GetValue(Object) |
指定されたオブジェクトのプロパティの値を返します。 |
GetValue(Object, Object[]) |
指定したオブジェクトのプロパティの値を返します。インデックス付きプロパティの場合は、オプションでインデックス値を設定できます。 |
GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) |
派生クラスでオーバーライドされると、指定したバインディング、インデックス、およびカルチャ固有の情報を含む指定されたオブジェクトのプロパティ値を返します。 |
GetValue(Object)
- ソース:
- PropertyInfo.cs
- ソース:
- PropertyInfo.cs
- ソース:
- PropertyInfo.cs
指定されたオブジェクトのプロパティの値を返します。
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
プロパティ値が返されるオブジェクト。
戻り値
指定されたオブジェクトのプロパティの値。
例
次の例では、 Planet
2 つのプロパティを持つクラスを定義します。 Name
これは、惑星の名前、および Distance
地球からの惑星の距離です。 この例では、 Planet
惑星 Jupiter を表す オブジェクトをインスタンス化し、プロパティに関する情報を表示するメソッドに GetPropertyValues
渡し、 メソッドを GetValue 使用して各 Planet
プロパティの値を取得します。
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 スローします。 メソッドを呼び出 GetIndexParameters すことで、プロパティのインデックスが作成されるかどうかを判断できます。 返される ParameterInfo 配列の長さが 0 の場合、 プロパティはインデックス付けされません。
これは、パラメーターが に設定され、 が に設定され、インデックス値のオブジェクト配列が に設定され、 が にBindernull
BindingFlags.Default設定された抽象GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)メソッドの実装をCultureInfo提供するnull
null
便利なメソッドBindingFlagsです。
適用対象
GetValue(Object, Object[])
- ソース:
- PropertyInfo.cs
- ソース:
- PropertyInfo.cs
- ソース:
- PropertyInfo.cs
指定したオブジェクトのプロパティの値を返します。インデックス付きプロパティの場合は、オプションでインデックス値を設定できます。
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
プロパティ値が返されるオブジェクト。
- index
- Object[]
インデックス付きプロパティのインデックス値 (省略可能)。 インデックス付きプロパティのインデックスは 0 から始まります。 インデックス付きでないプロパティの場合は、この値を null
にする必要があります。
戻り値
指定されたオブジェクトのプロパティの値。
実装
例外
オブジェクトがターゲット型と一致しません。あるいは、プロパティはインスタンス プロパティですが obj
は null
です。
注: .NET for Windows ストア アプリ または ポータブル クラス ライブラリでは、代わりに catch Exception を使用します。
index
内のパラメーターの数が、インデックス付きプロパティが受け取るパラメーターの数と一致していません。
クラス内のプライベート メソッドまたは保護されたメソッドへの正しくないアクセスが試行されました。
注: Windows ストア アプリまたはポータブル クラス ライブラリ用の .NET では、代わりに基本クラスの例外 MemberAccessExceptionである をキャッチします。
プロパティ値の取得中にエラーが発生しました。 たとえば、インデックス付きプロパティに対して指定されたインデックス値が範囲外です。 InnerException プロパティは、エラーの理由を示します。
例
次の例は、インデックス付きプロパティの値を取得する方法を示しています。 プロパティは String.Chars[] 、 クラスの既定のプロパティ (C#のインデクサー) String です。
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 。 結果の配列に 0 (ゼロ) の要素がある場合、プロパティのインデックスは作成されません。
これは、抽象GetValue
メソッドの実装を、パラメーター Binder
Default
を に設定し、 を に設定して null
提供するnull
便利なCultureInfo
メソッドBindingFlags
です。
静的プロパティは個々のオブジェクトではなく型に属しているため、object 引数として を渡 null
すことで静的プロパティを取得します。 たとえば、 の静的 CurrentCulture
プロパティを取得するには、次の CultureInfo
コードを使用します。
PropertyInfo CurCultProp =
(typeof(CultureInfo)).GetProperty("CurrentCulture");
Console.WriteLine("CurrCult: " +
CurCultProp.GetValue(null,null));
メソッドを GetValue
使用するには、まず クラス Type
を取得します。 から、 Type
を取得します PropertyInfo
。 から、 PropertyInfo
メソッドを使用します GetValue
。
注意
.NET Framework 2.0 以降では、このメソッドを使用して、フラグを使用して呼び出し元が許可ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccessされている場合、および非パブリック メンバーの許可セットが呼び出し元の許可セットまたはそのサブセットに制限されている場合は、非パブリック メンバーにアクセスできます。 ( リフレクションのセキュリティに関する考慮事項に関するページを参照してください)。この機能を使用するには、アプリケーションで .NET Framework 3.5 以降をターゲットにする必要があります。
適用対象
GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)
- ソース:
- PropertyInfo.cs
- ソース:
- PropertyInfo.cs
- ソース:
- PropertyInfo.cs
派生クラスでオーバーライドされると、指定したバインディング、インデックス、およびカルチャ固有の情報を含む指定されたオブジェクトのプロパティ値を返します。
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
プロパティ値が返されるオブジェクト。
- invokeAttr
- BindingFlags
呼び出し属性を指定する次の列挙型メンバーのビットごとの組み合わせ: InvokeMethod
、CreateInstance
、Static
、GetField
、SetField
、GetProperty
と SetProperty
。 適切な呼び出し属性を指定する必要があります。 たとえば、静的メンバーを呼び出すには、Static
フラグを設定します。
- binder
- Binder
バインディング、引数型の強制変換、メンバーの呼び出し、およびリフレクションを使用した MemberInfo オブジェクトの取得を有効にするオブジェクト。
binder
が null
の場合は、既定のバインダーが使用されます。
- index
- Object[]
インデックス付きプロパティのインデックス値 (省略可能)。 インデックス付きでないプロパティの場合は、この値を null
にする必要があります。
- culture
- CultureInfo
リソースのローカライズ対象のカルチャ。 リソースがこのカルチャ用にローカライズされていない場合は、一致する対象を検索するために Parent プロパティが連続して呼び出されます。 この値が null
の場合は、CurrentUICulture プロパティからカルチャ固有の情報が習得されます。
戻り値
指定されたオブジェクトのプロパティの値。
実装
例外
オブジェクトがターゲット型と一致しません。あるいは、プロパティはインスタンス プロパティですが obj
は null
です。
index
内のパラメーターの数が、インデックス付きプロパティが受け取るパラメーターの数と一致していません。
クラス内のプライベート メソッドまたは保護されたメソッドへの正しくないアクセスが試行されました。
プロパティ値の取得中にエラーが発生しました。 たとえば、インデックス付きプロパティに対して指定されたインデックス値が範囲外です。 InnerException プロパティは、エラーの理由を示します。
注釈
プロパティにインデックスを付けるかどうかを確認するには、 メソッドを使用します GetIndexParameters 。 結果の配列に 0 (ゼロ) の要素がある場合、プロパティのインデックスは作成されません。
静的プロパティは個々のオブジェクトではなく型に属しているため、object 引数として を渡 null
すことで静的プロパティを取得します。 たとえば、 の静的 CurrentCulture
プロパティを取得するには、次の CultureInfo
コードを使用します。
PropertyInfo CurCultProp =
(typeof(CultureInfo)).GetProperty("CurrentCulture");
Console.WriteLine("CurrCult: " +
CurCultProp.GetValue(null,null));
メソッドを GetValue
使用するには、まず クラス Type
を取得します。 から、 Type
を取得します PropertyInfo
。 から、 PropertyInfo
メソッドを使用します GetValue
。
注意
.NET Framework 2.0 以降では、このメソッドを使用して、フラグを使用して呼び出し元が許可ReflectionPermissionReflectionPermissionFlag.RestrictedMemberAccessされている場合、および非パブリック メンバーの許可セットが呼び出し元の許可セットまたはそのサブセットに制限されている場合は、非パブリック メンバーにアクセスできます。 ( リフレクションのセキュリティに関する考慮事項に関するページを参照してください)。この機能を使用するには、アプリケーションで .NET Framework 3.5 以降をターゲットにする必要があります。
こちらもご覧ください
適用対象
.NET