我试图访问一个类的属性(让我们称之为'A'),它是为了处理来自任何'B'成员的其他类(称为'B')的列表而构建的。但是我不希望这个属性被共享(静态),因此'A'的任何实例都可以具有此属性的不同值,并且任何'B'访问它所属的'A'的属性。
例如
**class A**
private Items as list (of B)
...
...
public property ThisProperty() as Integer
**end class**
**class B**
...
public function UseThisProperty() as string
If ThisProperty=1 then
return "this"
elseif ThisProperty=2 then
return "other"
else
return "sth else"
end function
**End class**
我不知道如何做到这一点,但任何想法都会受到赞赏。
答案 0 :(得分:1)
有一些方法可以解决这个问题。但是,解决方案在很大程度上取决于上下文和问题,例如谁创建了对象A / B?,A / B的生命周期是什么?,谁是A / B的客户?如何耦合A / B?。 不过这里有一些解决方案:
Public Class A
Public Property ThisProperty() As Integer
End Class
通过构造函数将对象A注入B中。如果A和B是紧密耦合的,并且如果它们不是它们的缺点,则会有帮助。同样在创建B A时必须存在:
Public Class B
Private _a As A
Public Sub New(a As A)
_a = a
End Sub
Public Function UseThisProperty() As String
If _a.ThisProperty = 1 Then
Return "this"
ElseIf _a.ThisProperty = 2 Then
Return "other"
Else
Return "sth else"
End If
End Function
End Class
仅通过构造函数将A.ThisProperty
的值注入B中。有助于解耦A和B,并且B只使用了一个(少数)属性:
Public Class B
Private _aThisProperty As Integer
Public Sub New(thisProperty As Integer)
_aThisProperty = thisProperty
End Sub
Public Function UseThisProperty() As String
If _aThisProperty = 1 Then
Return "this"
ElseIf _aThisProperty = 2 Then
Return "other"
Else
Return "sthelse"
End If
End Function
End Class
在调用B.UseThisProperty 时注入A.如果有一个C类解耦A和B,这很有用:
Public Class D
Public Function UseThisProperty(a As A) As String
If a.ThisProperty = 1 Then
Return "this"
ElseIf a.ThisProperty = 2 Then
Return "other"
Else
Return "sth else"
End If
End Function
End Class
通过公共设定者将A注入B中。如果在创建对象B时尚未确定A,这将非常有用:
Public Class B
Public Property a As A
Public Function UseThisProperty() As String
If a.ThisProperty = 1 Then
Return "this"
ElseIf a.ThisProperty = 2 Then
Return "other"
Else
Return "sth else"
End If
End Function
End Class
还有其他类似Mediator
类的解决方案可以完全解耦A和B.等。