给出一个班级
public class MovementType
Public Sub Move()
//Move around
End Sub
End class
和界面
public Interface IMovingObject
Property mType As MovementType
Sub Move()
End Interface
我想为MovementType的不同子类提供此接口的几个实现。例如,我想为以下每个子类创建一个IMovingObject实现,其中我将mType设置为这些类的实例。
public class Swimming
Inherits MovementType
public Sub dive()
//breathe
//dive
End Sub
End class
或
public class Flying
Inherits MovementType
public Sub land()
//catch CanNotLandOnLavaException
End Sub
End class
因此我想创建这样的东西:
public class FlyingObject
Implements IMovingObject
Property mType As Flying
public Sub Move()
mType.Move()
End Sub
End class
我想要这样的设置的原因是我希望能够使用相同的界面管理FlyingObjects和SwimmingObjects来移动它们。但是在某些情况下,当我有一个具体的IMovingObject实现时,我需要调用特定的方法(比如一个SwimmingObject的mType.dive())。因此,对于SwimmingObject而言,mType必须是“游泳”,而不是通用的MovementType。
我在我的示例中遇到的问题当然是FlyingObject没有实现IMovingObject,因为mType没有在Interface中指定的Type“MovementType”。
一种可能的解决方案是将mType设置为“Flying”的实例
public class FlyingObject
Implements IMovingObject
Property mType As MovementType
Public Sub New()
mType = New Flying()
End Sub
public Sub Move()
mType.Move()
End Sub
End class
然后我可以使用
从任何地方调用land()方法Ctype(mtype,Flying).land()
尽管使用直接演员并不是一个可行的解决方案。实现这个的“正确”方法是什么?
请注意,上面的代码只是一个示例,忽略了不寻常的命名约定,以及赋予类型“潜水”或“降落”能力没有意义的事实。我只想给你一些代码来处理:)
答案 0 :(得分:0)
也许你想要
Public Interface IMover(Of Out TMovementType As MovementType)
Property MovementType As TMovementType
Sub Move()
End Interface
会导致
Public class FlyingObject
Implements IMover<Flying>
Property MovementType As Flying
Public Sub Move()
Me.MovementType.Move()
End Sub
End Class