クラスのメンバの値をメンバ名の文字列を使って取得できますか?
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2020/10/15 15:49:02
Public なインスタンス メンバーであれば、
Microsoft.VisualBasic.Interaction.CallByName を使うことができます。
Private なメンバーの場合には、CallByName は使えません。
(呼び出したい場合は、System.Reflection 名前空間のクラスを使うことになります)
Microsoft.VisualBasic.Interaction.CallByName を使うことができます。
Public Class Sample
Public Property Hoge1 As String
Public Property Hoge2 As String
Public Property Hoge3 As String
End Class
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim p As New Sample() With {.Hoge1 = "a", .Hoge2 = "b", .Hoge3 = "c"}
ListBox1.Items.Add("Hoge1=" & p.Hoge1)
'CallByName で値を読み取る
Dim memberName As String = "Hoge2"
ListBox1.Items.Add("Hoge2=" & CallByName(p, memberName, CallType.Get))
'CallByName で値を書き込む
memberName = "Hoge3"
CallByName(p, memberName, CallType.Set, "新しい値")
ListBox1.Items.Add("Hoge3=" & p.Hoge3)
End Sub
Private なメンバーの場合には、CallByName は使えません。
(呼び出したい場合は、System.Reflection 名前空間のクラスを使うことになります)
とあるクラスに、
Public Property Hoge1 As String
Public Property Hoge2 As String
Public Property Hoge3 As String ...
のようなメンバがあった場合、
"Hoge" & i (i = 1, 2, 3...)
のようなメンバ名の文字列変数を使用して、メンバの値を取得することはできますか?
(frameworkで用意されているでしょうか?)