可以在.NET中创建变量别名吗?
考虑以下简单代码:可以在.NET中创建变量别名吗?,.net,alias,.net,Alias,考虑以下简单代码: Dim v1 as A Dim v2 as A v1 = new A v2 = v1 v1 = new A 此代码导致v1和v2引用2个不同的对象 我正在寻找一种方法,使v2成为v1的别名,这样最终,v2将引用与v1相同的对象。 是否有一种特殊的方法可以将v1分配给v2,从而达到这个目的?这是一个奇怪的要求,可能有更好的方法来解决它,但与计算机科学中的任何东西一样,你可以通过一层抽象来解决这个问题: Public Class AContainer Private
Dim v1 as A
Dim v2 as A
v1 = new A
v2 = v1
v1 = new A
此代码导致v1和v2引用2个不同的对象
我正在寻找一种方法,使v2成为v1的别名,这样最终,v2将引用与v1相同的对象。
是否有一种特殊的方法可以将v1分配给v2,从而达到这个目的?这是一个奇怪的要求,可能有更好的方法来解决它,但与计算机科学中的任何东西一样,你可以通过一层抽象来解决这个问题:
Public Class AContainer
Private a As A
Public ReadOnly Property A() As A
Get
Return a
End Get
End Property
Public Sub New(ByVal value As A)
a = value
End Sub
Public Sub Update(ByVal value As a)
a = value
End Sub
End Class
现在,您只需将v1
和v2
设置为A容器的相同实例,然后就可以引用v1.A
或v2.A
,它们将始终具有相同的A实例
更可能的情况是,您需要重新评估为什么需要将v1
和v2
保持一致,而不是使用相同的引用。我可以问一下为什么吗?如果v1
和v2
具有不同的作用域,您只需将其中一个推向“全局”(在某种程度上是不好的)。否。没有。我很想知道你为什么要这么做。@Justiniessner:FORTRAN程序员可以用等价物来做……但这通常是一个肮脏的黑客行为,或者是因为缺乏解决问题的其他方法的知识。就我而言,v2=v1
会自动生成v2
referencev1
。但是,这将被新实例覆盖。我很确定对v2
中的对象所做的更改也会显示在v1
@Cobra\u Fast中:OP希望v1和v2始终指向同一对象,即使引用发生更改。OP不关心引用成员的更改。我知道这个问题似乎有点奇怪。问题是,我们正在使用一个库来管理对象存储中的对象。当它检测到对象已过时且需要重置时,它会创建一个新实例,以确保没有旧实例的痕迹。当我想使用同一对象的多个引用时,这是不好的,因为在某个点上,该对象可能会被删除,并且只有一个引用会指向新对象。我认为问题可能只是库,它不应该创建新实例,而是应该正确清理该对象。。。但它有点敏感,这就是为什么我想知道是否有一种方法可以创建别名。谢谢你的回答;)