获取变量是其成员的对象的引用

时间:2018-03-09 19:28:12

标签: .net vb.net reflection

我有一个客户类:

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

1 个答案:

答案 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)