Imports System.Reflection
Imports System.Collections.Generic
Class Example
Private Shared _sharedProperty As Integer = 41
Public Shared Property SharedProperty As Integer
Return _sharedProperty
End Get
_sharedProperty = Value
End Set
End Property
Private _instanceProperty As Integer = 42
Public Property InstanceProperty As Integer
Return _instanceProperty
End Get
_instanceProperty = Value
End Set
End Property
Private _indexedInstanceProperty As New Dictionary(Of Integer, String)
Default Public Property IndexedInstanceProperty(ByVal key As Integer) As String
Dim returnValue As String = Nothing
If _indexedInstanceProperty.TryGetValue(key, returnValue) Then
Return returnValue
Return Nothing
End If
End Get
If Value Is Nothing Then
Throw New ArgumentNullException( _
"IndexedInstanceProperty value can be an empty string, but it cannot be Nothing.")
If _indexedInstanceProperty.ContainsKey(key) Then
_indexedInstanceProperty(key) = Value
_indexedInstanceProperty.Add(key, Value)
End If
End If
End Set
End Property
Shared Sub Main()
Console.WriteLine("Initial value of class-level property: {0}", _
Example.SharedProperty)
Dim piShared As PropertyInfo = _
GetType(Example).GetProperty("SharedProperty")
piShared.SetValue( _
Nothing, _
76, _
Nothing)
Console.WriteLine("Final value of class-level property: {0}", _
Example.SharedProperty)
Dim exam As New Example
Console.WriteLine(vbCrLf & _
"Initial value of instance property: {0}", _
exam.InstanceProperty)
Dim piInstance As PropertyInfo = _
GetType(Example).GetProperty("InstanceProperty")
piInstance.SetValue( _
exam, _
37, _
Nothing)
Console.WriteLine("Final value of instance property: {0}", _
exam.InstanceProperty)
exam(17) = "String number 17"
exam(46) = "String number 46"
' In Visual Basic, a default indexed property can also be referred
' to by name.
exam.IndexedInstanceProperty(9) = "String number 9"
Console.WriteLine(vbCrLf & _
"Initial value of indexed instance property(17): '{0}'", _
exam(17))
Dim piIndexedInstance As PropertyInfo = _
GetType(Example).GetProperty("IndexedInstanceProperty")
piIndexedInstance.SetValue( _
exam, _
"New value for string number 17", _
New Object() { CType(17, Integer) })
Console.WriteLine("Final value of indexed instance property(17): '{0}'", _
exam(17))
End Sub
End Class
' This example produces the following output:
'Initial value of class-level property: 41
'Final value of class-level property: 76
'Initial value of instance property: 42
'Final value of instance property: 37
'Initial value of indexed instance property(17): 'String number 17'
'Final value of indexed instance property(17): 'New value for string number 17'
この
PropertyInfo
オブジェクトが値型で
value
、 が の
null
場合、プロパティはその型の既定値に設定されます。
プロパティにインデックスが付いているかどうかを確認するには、 メソッドを使用します
GetIndexParameters
。 結果の配列に 0 (ゼロ) の要素がある場合、プロパティのインデックスは作成されません。
これは、抽象メソッドのランタイム実装を呼び出す便利な
SetValue(Object, Object, BindingFlags, Binder, Object[], CultureInfo)
メソッドで、 パラメーター
null
に を、、 に
BindingFlags
を
null
Binder
指定
BindingFlags.Default
します
CultureInfo
。
メソッドを使用するには、最初に
SetValue
クラスを
Type
表す オブジェクトを取得します。 から、
Type
を取得します
PropertyInfo
。 から、
PropertyInfo
メソッドを使用します
SetValue
。
.NET Framework 2.0 以降では、このメソッドを使用して、呼び出し元が フラグを使用
ReflectionPermissionFlag.RestrictedMemberAccess
して許可
ReflectionPermission
されている場合、および非パブリック メンバーの許可セットが呼び出し元の許可セットまたはそのサブセットに制限されている場合に、非パブリック メンバーにアクセスできます。 (
リフレクションのセキュリティに関する考慮事項に関するページを
参照してください)。この機能を使用するには、アプリケーションで .NET Framework 3.5 以降をターゲットにする必要があります。
public:
abstract void SetValue(System::Object ^ obj, System::Object ^ value, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ index, System::Globalization::CultureInfo ^ culture);
public abstract void SetValue (object? obj, object? value, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object?[]? index, System.Globalization.CultureInfo? culture);
public abstract void SetValue (object obj, object value, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] index, System.Globalization.CultureInfo culture);
abstract member SetValue : obj * obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> unit
Public MustOverride Sub SetValue (obj As Object, value As Object, invokeAttr As BindingFlags, binder As Binder, index As Object(), culture As CultureInfo)
パラメーター
リソースのローカライズ対象のカルチャ。 リソースがこのカルチャ用にローカライズされていない場合は、一致する対象を検索するために
Parent
プロパティが連続して呼び出されます。 この値が
null
の場合は、
CurrentUICulture
プロパティからカルチャ固有の情報が習得されます。
SetValue(Object, Object, BindingFlags, Binder, Object[], CultureInfo)
この
PropertyInfo
オブジェクトが値型で
value
、 が の
null
場合、プロパティはその型の既定値に設定されます。
プロパティにインデックスが付いているかどうかを確認するには、 メソッドを使用します
GetIndexParameters
。 結果の配列に 0 (ゼロ) の要素がある場合、プロパティのインデックスは作成されません。
完全に信頼されたコードでは、アクセス制限は無視されます。 つまり、プライベート コンストラクター、メソッド、フィールド、プロパティにアクセスし、コードが完全に信頼されるたびに Reflection を介して呼び出すことができます。
メソッドを使用するには、最初に
SetValue
クラス
Type
を取得します。 から、
Type
を取得します
PropertyInfo
。 から、
PropertyInfo
メソッドを使用します
SetValue
。
.NET Framework 2.0 以降では、このメソッドを使用して、呼び出し元が フラグを使用
ReflectionPermissionFlag.RestrictedMemberAccess
して許可
ReflectionPermission
されている場合、および非パブリック メンバーの許可セットが呼び出し元の許可セットまたはそのサブセットに制限されている場合に、非パブリック メンバーにアクセスできます。 (
リフレクションのセキュリティに関する考慮事項に関するページを
参照してください)。この機能を使用するには、アプリケーションで .NET Framework 3.5 以降をターゲットにする必要があります。