可以在vb.net中的聚合/复合类中实现接口吗?

时间:2010-03-30 14:01:10

标签: vb.net interface aggregate

VB.NET .NET 3.5

我有一个名为Package的聚合类作为运输系统的一部分。包中包含另一个类BoxType。 BoxType包含有关用于运送包裹的盒子的信息,例如Box的长度,宽度等。

Package有一个名为GetShippingRates的方法。此方法调用单独的帮助程序类ShipRater,并将Package本身作为参数传递。 ShipRater检查Package和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需要来自Package及其聚合BoxType的信息。如果我编写一个接口IRateable,那么我如何使用BoxType属性来实现接口的一部分?这可能吗?

2 个答案:

答案 0 :(得分:2)

接口不需要知道如何聚合调用(可以假设并非所有Rateable项都需要聚合调用)。将聚合(通过委托)调用保留为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

答案 1 :(得分: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; }
    }
}