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