使用子类实现接口

时间:2013-03-13 07:12:16

标签: vb.net oop interface inheritance

我有以下界面:

Interface IViewModel
    ...
End Interface

Interface ISpecialViewModel
    Inherits IViewModel
    ...
End Interface

Interface IView
    WriteOnly Property MyViewModel As IViewModel
End Interface

以下是我的课程:

Class VerySpecialViewModel
    implements ISpecialViewModel
    ...
End Class

Class View
    Implements IView

    Public WriteOnly Property MyViewModel As VerySpecialViewModel Implements IView.MyViewModel 
        ...
    End Property
End Class

它告诉我'MyViewModel'无法实现'MyViewModel',因为接口'IView'上没有匹配的属性。

1 个答案:

答案 0 :(得分:1)

Public Interface ISomething
    WriteOnly Property Prop As IParent
End Interface

您的类实现不满足该接口声明。请考虑以下情况:

还有另一个名为IChild2的接口:

Public Interface IChild2
    Inherits IParent
    ...
End Interface

根据ISomething界面,您应该能够将实现IChild2的类的实例分配到Thing.Prop,因为它继承了IParent。但是你不能,因为{ {1}}属性属于Thing.Prop类型且IChild未继承IChild2

更新

该解决方案如何:

IChild

UPDATE2

Class ThingBase
    Implements ISomething

    Public WriteOnly Property Prop As IParent Implements ISomething.Prop
        Set(value As IParent)

        End Set
    End Property
End Class

Class Thing
    Inherits ThingBase

    Public Overloads WriteOnly Property Prop As IChild
        Set(value As IChild)
            MyBase.Prop = value
        End Set
    End Property
End Class

Interface IView(Of T As IViewModel)
    WriteOnly Property MyViewModel As T
End Interface

Class VerySpecialViewModel
    Implements ISpecialViewModel
End Class

Class View
    Implements IView(Of ISpecialViewModel)

    Public WriteOnly Property MyViewModel As ISpecialViewModel Implements IView(Of ISpecialViewModel).MyViewModel
        Set(value As ISpecialViewModel)

        End Set
    End Property
End Class