Visual Basic 中学校 掲示板 投稿内容
タグのない投稿を抽出 統計 RSS

Visual Basic 中学校 > 投稿一覧 >

クラスのメンバの値をメンバ名の文字列を使って取得できますか?

タグの編集...

投稿者 qp   (社会人)   投稿日時 2020/10/15 14:43:05
こんにちは。
とあるクラスに、
Public Property Hoge1 As String
Public Property Hoge2 As String
Public Property Hoge3 As String ...
のようなメンバがあった場合、

"Hoge" & i (i = 1, 2, 3...)

のようなメンバ名の文字列変数を使用して、メンバの値を取得することはできますか?
(frameworkで用意されているでしょうか?)


投稿者 魔界の仮面弁士   (社会人)   投稿日時 2020/10/15 15:49:02
Public なインスタンス メンバーであれば、
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 名前空間のクラスを使うことになります)