2013-03-13 64 views
0

我有以下接口:實現與子類的接口

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
Public Interface ISomething 
    WriteOnly Property Prop As IParent 
End Interface 

該接口聲明不滿足您的類實現。請考慮以下情況:

有一個叫IChild2另一個接口:

Public Interface IChild2 
    Inherits IParent 
    ... 
End Interface 

根據ISomething接口,你應該能夠實現IChild2類的實例分配到Thing.Prop,因爲它繼承了IParent。但你不能,因爲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 

UPDATE2

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 
+0

嗯......我明白了。圍繞它有一個優雅的解決方案嗎? – dotNET 2013-03-13 07:20:03

+0

圍繞什麼?圍繞實現界面而不滿足其定義?不是真的。 – MarcinJuraszek 2013-03-13 07:21:13

+0

這是MVVM。我基本上試圖在我所有的ViewModel上實現一個通用接口IParent。其中一些ViewModel更加專業化並實現了IChild。同樣,我的Views也實現了一個通用接口ISomething,它有一個指向底層ViewModel類的成員Prop。現在我不確定這個Prop是什麼類型的東西?我的想法是它是IParent類型的,所以所有視圖都可以實現它。 – dotNET 2013-03-13 07:28:29