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)
方法的執行時間實作,並
BindingFlags.Default
針對
BindingFlags
指定 參數、
null
Binder
針對 和
null
指定
CultureInfo
。
若要使用
SetValue
方法,請先取得
Type
代表 類別的 物件。 從 取得
Type
PropertyInfo
。 從 使用
PropertyInfo
SetValue
方法。
從 .NET Framework 2.0 開始,如果呼叫端已使用 旗標授與呼叫端,而且非公用成員的授與集限制為呼叫端的授
ReflectionPermission
ReflectionPermissionFlag.RestrictedMemberAccess
與集或子集,這個方法就可以用來存取非公用成員。 (請參閱 Reflection.)
的安全性考慮
若要使用此功能,您的應用程式應以 .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 開始,如果呼叫端已使用 旗標授與呼叫端,而且非公用成員的授與集限制為呼叫端的授
ReflectionPermission
ReflectionPermissionFlag.RestrictedMemberAccess
與集或子集,這個方法就可以用來存取非公用成員。 (請參閱 Reflection.)
的安全性考慮
若要使用此功能,您的應用程式應以 .NET Framework 3.5 或更新版本為目標。