ISearch(Of SearchResult)
не ISearch(Of ISearchResult)
- у них разные параметры универсального типа. Search
является ISearch(Of SearchResult)
.
Ответ Брайана охватывает ковариацию и т. Д., Материал для .NET 4, который я планировал добавить к этому вопросу позже (я быстро написал первоначальный ответ, а затем мне пришлось отключиться - к тому времени, когда я вернулся, Брайан ответил)
Чтобы ответить г-н. Мой комментарий - представьте, если у ISearch
был другой метод:
Sub AddID(ID as T)
и предполагая, что мы затем реализуем это в Search
(который, помните, равен ISearch(Of SearchResult)
, поэтому T
равен SearchResult
). И предположим, что у нас было что-то еще, что реализует ISearchResult
, скажем:
Public Class BadNews
Implements ISearchResult
Public Function id() As String Implements ISearchResult.id
Return "other"
Function
End Class
Теперь, если ваш актерский состав сработал, мы могли бы позвонить:
foobar.AddID(New BadNews)
Но это не может работать - реализация AddID
, которую мы вызываем, - это реализация, реализованная Search
- и эта функция ожидает только получения объектов типа SearchResult
.