Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 实现与子类的接口_Vb.net_Oop_Interface_Inheritance - Fatal编程技术网

Vb.net 实现与子类的接口

Vb.net 实现与子类的接口,vb.net,oop,interface,inheritance,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 imp

我有以下接口:

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”上没有匹配的属性

Public Interface ISomething
    WriteOnly Property Prop As IParent
End Interface
类实现不满足该接口声明。考虑以下情况:

还有另一个接口称为IChild2:

Public Interface IChild2
    Inherits IParent
    ...
End Interface
根据
ISomething
接口,您应该能够将实现
IChild2
的类的实例分配到
Thing.Prop
,因为它继承了
iPart
。但是您不能,因为
Thing.Prop
属性属于
IChild
类型,并且
IChild2
不继承
IChild

更新

那么这个解决方案呢:

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
更新2


六羟甲基三聚氰胺六甲醚。。。我懂了。有一个优雅的解决方案吗?围绕什么?在不满足其定义的情况下实现接口?不完全是。这是MVVM。我基本上是想在我所有的ViewModels上实现一个公共界面IParent。其中一些ViewModel更加专业化,并实现IChild。类似地,我的视图还实现了一个公共接口ISomething,它有一个指向基础ViewModel类的成员属性。现在我不确定这个道具是什么类型的?我的想法是让它成为iPart类型,这样所有视图都可以实现它。请参阅我的更新。您应该创建
ThingBase
类或使用泛型。这是一个很好的解决方案。唯一的问题是我的视图已经从一个框架类继承,vb.net不允许多重继承。
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
Class View
    Implements IView(Of VerySpecialViewModel)

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

        End Set
    End Property
End Class