2010-03-30 76 views
1

VB.NET .NET 3.5可以通過vb.net中的聚合/複合類實現接口嗎?

我有一個稱爲Package的集合類作爲運輸系統的一部分。包中包含另一個類BoxType。 BoxType包含有關用於運送包裹的箱子的信息,例如箱子的長度,寬度等。

包中有一個名爲GetShippingRates的方法。此方法調用獨立的助手類ShipRater,並將Package本身作爲參數傳遞。 ShipRater檢查包裝和BoxType,並返回可能的運費/方法列表。

我想要做的是構建一個接口,IRateable,將提供給助手類ShipRater。因此,而不是:

Class ShipRater 
    Sub New(SomePackage as Package) 
    End Sub 
End Class 

,我們會做:

Class ShipRater 
    Sub New(SomeThingRateable as IRateable) 
    End Sub 
End Class 

然而,ShipRater需要從包裝和骨料,BoxType雙方的信息。如果我編寫一個接口IRateable,那麼如何使用BoxType屬性來實現接口的一部分?這可能嗎?

+0

給安東從他第一次的答案。感謝你們每個人。 – 2010-03-30 14:52:14

回答

0

當然。只需將所需的呼叫委託給彙總的BoxType即可。對不起,C#:

class Package : IRateable 
{ 
    private float weight; 
    private BoxType box; 

    Size IRateable.Dimensions 
    { 
     get { return box.Dimensions; } 
    } 

    float IRateable.Weight 
    { 
     get { return weight; } 
    } 
} 
+0

我想我明白你的意思,但讓我確定。如果我需要BoxType的框長度,我會在Package中創建一個實現IRateable.GetBoxLength的新屬性。該屬性只會調用BoxType.Length並返回它? – 2010-03-30 14:07:37

+0

感謝Anton,C#沒有問題。我會先給你答覆,因爲你先發布它,我希望這是正確的禮儀。 – 2010-03-30 14:53:03

2

接口就沒有必要知道你是如何聚集調用任何東西(可以假設,並非所有的應課差餉租物品需要agregate調用)。離開聚合(通過授權)調用達Package

Public Interface IRateable 
    Function GetRate() As Double 
End Interface 

Public Class Package Implements IRateable 
    Dim _boxType As New BoxType() 

    'Rest of implementation' 
    Public Function GetRate() As Double Implements IRateable.GetRate 
     Return _boxType.Rate() 
    End Function 
End Class 
+0

@Jon感謝您的轉換!我的VB.NET Fu有點生疏。 – 2010-03-30 14:13:15

+0

正在考慮一個答案几乎完全相同,當你的已經彈出。認爲我可能只是將其轉換。 :) – 2010-03-30 14:26:09

+0

謝謝你們,我不知道我爲什麼總是這麼想。那些日子裏,你做任何事情都比過去更難過? – 2010-03-30 14:47:12