我有一个客户类:
Public Class Customer
Public Name As String
End Class
我将名字传递给子程序foo:
Dim myCustomer as New Customer
myCustomer.Name = "Bill"
Foo(myCustomer.Name)
使用Reflection,有没有办法让Foo获取name参数所属的MyCustomer 实例的引用?
Public Sub Foo (name As String)
'Any way to obtain a reference to the MyCustomer instance from
'the name parameter alone?
End Sub
答案 0 :(得分:1)
不。
想想这些对象在内存中的外观。简而言之,它看起来像这样:
| Address | Value |
|---------|-----------------------|
| 0x01 | "Bill" |
| 0x02 | Customer(Name = 0x01) |
当您调用该方法时,您将地址传递给字符串。
Foo(myCustomer.Name)
......等同于......
String n = myCustomer.Name; // n is now 0x01
Foo(n);
进入Foo
后,您只能看到0x01。它没有指向存储客户实例的0x02的链接。你必须基本上强制内存来查找对0x01的引用,这在VB等高级内存管理语言中是不可能的(或者至少是好的做法)。
唯一的选择是引入一个新的重载,该重载采用类型Customer
,并且可能为非客户特定的位调用Foo(String)
。