Option Explicit On
Option Strict On
Public Class Class1
Dim l As List(Of A)
Public Sub New()
l = New List(Of B)
End Sub
End Class
Public Class A
End Class
Public Class B
Inherits A
End Class<p>
Я столкнулся с этой проблемой.
У меня есть список общего типа A'
.
Я хочу определить список как общий тип «B», который является подклассом «A».
Почему этого нельзя сделать и как добиться того же эффекта?





Это вопрос дисперсии, которую C# не поддерживает для дженериков. См. Сообщение Рика Байера на эту тему.
Если бы вы могли преобразовать список As в список B, то что бы произошло, если бы вы добавили A?
Хотя, очевидно, нет, но я подумаю над проблемой.
В C# 4.0 (как было объявлено вчера) мы - почти на месте.
Если класс A использовался как универсальный тип, он должен действовать как интерфейс для любых добавленных подклассов. Вы должны иметь возможность использовать любые методы / переменные в A, B и B, если вы явно приведете их.