vb.net - 使用 CallByName 访问子类或子属性

标签 vb.net callbyname

我可以使用CallByName访问类的子值(换句话说,我可以用它获取Class.SubValue)。
但是当我想要 Class.SUBCLASS.SubValue 时出现错误使用 CallByName。
是否可以使用 CallByName (或使用 smtg else)来做到这一点?

这是一个典型的代码:

Class Class1
    Public someVariable as Long=123 'now "Class1" has "someVariable" 
End Class
Class Class2
    Public subClass as new Class1   'now "Class2" has a SUBCLASS "Class1" 
End Class

Sub Test()
    Dim c1 as New Class1, c2 as New Class2
        'This works fine, and I can get c1.someVariable. It's OK.
    a=CallByName(c1,"someVariable",CallType.Get)
        'But I get error here... and I can't get c2.subClass.someVariable
    b=CallByName(c2,"subClass.someVariable",CallType.Get)
End Sub

--编辑:这是实际的问题。 --

我想从文件中加载参数到表单的控件,文件中参数的写法如下:
<ControlName>.<Property>=<Value> | TextBox1.Text=SomeText | Button2.Left=1234
当我使用时出现错误:
CallByName(MyForm, "<ControlName>.<Property>", CallType.Set, "<Value>")

如何解决我的问题(使用 CallByName 或 smtg else)?

最佳答案

我使用了这个简单的递归函数

  Function RecursiveGetValue(ByVal Name As String, ByVal Data As Object) As Object
If Name.Contains(".") = True Then
  RecursiveGetValue = RecursiveGetValue(Name.Substring(Name.IndexOf(".") + 1), CallByName(Data, Name.Split(".")(0), CallType.Get))
Else
  RecursiveGetValue = CallByName(Data, Name, CallType.Get)
End If

结束函数

关于vb.net - 使用 CallByName 访问子类或子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15602984/

相关文章:

c# - 以编程方式更改 Windows 10 锁屏背景(在桌面上)

.net - 列表框选中项检查

scala - 在按名称参数 : evaluation is not forced? 中传递的函数上使用 apply ("()")

按值调用与按名称调用在 Scala 日志记录库中的性能

vb.net - 仅反射(reflect) VB.NET 上派生类的子属性

c# - 什么应该进入顶级命名空间?

c# - 为运行时或编译时引用所有必需的程序集?

vb6 - 在 vb6 下将我作为 CallbyName 函数中的参数传递有什么问题?

scala - 理解 Scala 中的名称调用

performance - Scala By-name 参数性能有多好?