访问类的属性,该类主要处理来自任何这些对象的对象列表。 (vb.net)

时间:2016-04-18 07:24:01

标签: c# vb.net

我试图访问一个类的属性(让我们称之为'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**

我不知道如何做到这一点,但任何想法都会受到赞赏。

1 个答案:

答案 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.等。