2012-03-08 4 views
0

내가이 수업을 "변환 할 수 없습니다" "웹 사이트"변수를 전달합니다.VB 제네릭이 문제에 대한

LoadSubscriptions에는 BaseCollection (Of IBaseLeaf)이 필요합니다.

"웹 사이트"변수는 BaseCollection (Of WebsiteLeaf Of Headline) 인 WebsiteCollection입니다.

이제 '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으로 입력되었으므로 날짜는 박스로 처리 (즉, 객체로 변환)되지만 문자열로 변환되지는 않습니다.

List(Of X)List(Of Y)YX을 상속하더라도 호환되지 않습니다. 당신이 WebsiteCollectionLoadSubscriptions를 호출하면 어떻게됩니까 또 다른 예

Public Class TestClass 
    Implements IBaseLeaf  
    // etc 

에서


살펴 보자?

Public Sub LoadSubscriptions(ByVal collection As BaseCollection(Of IBaseLeaf))  
    collection.Add(New TestClass()) 
End Sub