2012-03-08 10 views
0

を「変換できない」VBジェネリック医薬品は、私は、これらのクラスを持っている問題については

Private Sub FetchSubscriptions(ByVal websites As WebsiteCollection) 
     gUser.SubscriptionList.LoadSubscriptions(websites) 
     // code 
End Sub 

これはとLoadSubscriptionsにアクセスします"ウェブサイト"変数を渡します。

ご覧のとおり、LoadSubscriptionsはBaseCollection(Of IBaseLeaf)を想定しています。

「ウェブサイト」変数はWebsiteCollectionで、BaseCollection(Of WebsiteLeaf Of Headline)です。

エラーが発生しました: 'WebsiteCollection'タイプの値を 'BaseCollection(Of IBaseLeaf)'に変換できません。

私はここで間違っていますか?

+0

[一般的な共分散と反差異](http://msdn.microsoft.com/en-us/library/dd799517.aspx) – MarkJ

答えて

2

クラスBがクラスAの子孫である場合、これはCollection(Of B)Collection(Of A)の子孫であることを意味しません!

あなたは、これらの定義

Dim stringList As List(Of String) 

Public Sub DoSomthingWithList(list As List(Of object)) 
    list.Add(Date.Now) 
End Sub 

を持っていて、この

DoSomthingWithList(stringList) 

のようなメソッドを呼び出すことができ、その後の方法は、実際に文字列のリストであるリストにDateを追加しようとした場合!パラメータはobjectと入力されているため、日付はボックス化(つまりオブジェクトに変換)されますが、文字列には変換されません。

したがって、がXを継承しても、コレクションList(Of X)List(Of Y)は互換性がありません。


あなたはWebsiteCollectionLoadSubscriptionsを呼び出した場合はどうなり

Public Class TestClass 
    Implements IBaseLeaf  
    // etc 

のは、別の例を見てみましょうか?

Public Sub LoadSubscriptions(ByVal collection As BaseCollection(Of IBaseLeaf))  
    collection.Add(New TestClass()) 
End Sub  
関連する問題