リフレクションでクラスメンバーにアクセスしてみました。
Public Class TestClass
Dim var1_ As Integer = 954
Dim v_ As String = "KK"
Public Sub New(ByVal var As Integer, ByVal v As String)
var1_ = var
v_ = v
End Sub
End Class
プロパティ化しない変数Filedだから, NoPublic のFieldInfo で取得できます.
GetField/SetFieldがすんなり走ってくれました。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim cl1 As New TestClass(3, "CCC")
Dim t As Type = GetType(TestClass)
Dim flg9 As BindingFlags = BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.DeclaredOnly
Dim fi As FieldInfo = t.GetField("var1_", flg9)
Dim ob As Object = fi.GetValue(cl1)
MessageBox.Show(ob.ToString) =>>値は 3
fi.SetValue(cl1, -547)
ob = fi.GetValue(cl1)
MessageBox.Show(ob.ToString) =>>値は -547
End Sub
TestClassのメンバ "var1_"はprivateで隠されているはずなのに,この方法で操作できてしまいます。
t.InvokeMember() でのアクセスは操作できません。
感覚的にこれはおかしいと思うのですが,仕様なのかな? 私の感覚がおかしいのかな?