2015-12-20 99 views
0

可以说我有这些类是否可以确定通过哪个对象访问对象?

Public Class Connection 
    Private a as Node 
    Private b as Node 

    Public Property Self as Node 
    Public Property Other as Node 

    Public Sub New(a as Node, b as Node) 
     Me.a = a : Me.b = b 
     a.Connection = Me : b.Connection = Me 
    End Sub 
End Class 

Public Class Node 
    Public Connection as Connection 
End Class 

,我把它像这样

Dim a = New Node() 
Dim b = New Node() 
Dim c = New Connection(a, b); 

所以这两个节点共享同一个连接对象。现在我试图找出是否可以为Connection属性Self和Other定义一个getter,它可以检测它们正在访问哪个对象并相应地更改它们的返回值?

例如一些伪代码

Public Property Other as Node 
Get 
    If (<CalledThroughObject> = a) Then Return b 
    Return a 
End Get 

,这应该是胜负

a.Connection.Other = b 
b.Connection.Other = a 

回答

1

直接回答你的问题是:不,你不能。

但是,您可以以不同方式为您的类建模,以实现您正在尝试执行的操作。这里有一个例子:

Public Class Connection 
    Private my_node As Node 
    Private other_node As Node 

    Public ReadOnly Property Self As Node 
     Get 
      Return my_node 
     End Get 
    End Property 

    Public ReadOnly Property Other As Node 
     Get 
      Return other_node 
     End Get 
    End Property 

    Public Sub New(myNode As Node, otherNode As Node) 
     Me.my_node = myNode 
     Me.other_node = otherNode 
    End Sub 
End Class 

现在Connection类有“我的节点”和“其他节点”概念的概念。这意味着每个节点将有一个Connection类的单独实例。

这里是Node类会是什么样子:

Public Class Node 
    Public Connection As Connection 

    Public Sub ConnectWith(otherNode As Node) 
     Me.Connection = New Connection(Me, OtherNode) 
     OtherNode.Connection = New Connection(OtherNode, Me) 
    End Sub 

End Class 

通知的ConnectWith方法,它允许你在一个节点与另一个连接。注意它如何为这两个节点创建两个Connection对象。每个连接对象都知道哪个是“自己”节点,哪个是“其他”节点。

这里是你将如何使用这些类:

Dim a = New Node() 
Dim b = New Node() 

a.ConnectWith(b) 

现在a.Connection.Other将指向bb.Connection.Other将指向a

相关问题