Я хочу создать коллекцию в VB.NET, но хочу, чтобы она принимала только объекты определенного типа. Например, я хочу создать класс под названием «FooCollection», который действует как коллекция во всех отношениях, но принимает только объекты типа «Foo».
Я думал, что смогу сделать это с помощью дженериков, используя следующий синтаксис:
Public Class FooCollection(Of type As Foo)
Inherits CollectionBase
...
End Class
Но при компиляции я получаю сообщение об ошибке, что я «должен реализовать средство доступа по умолчанию», так что явно чего-то не хватает. Я не хочу указывать тип, который он принимает при создании экземпляра - я хочу, чтобы сама FooCollection указала, что он принимает только объекты Foo. Я видел, как это было сделано на C# с помощью строго типизированного списка, так что, возможно, все, что мне нужно, это синтаксис VB.NET.
Спасибо за вашу помощь!
Обновлено: Спасибо за ответ. Это сработало бы, но я хотел, чтобы тип класса был назван определенным образом, я фактически выполнил именно то, что искал, с помощью следующего кода:
Public Class FooCollection
Inherits List(Of Foo)
End Class





Почему бы вам просто не использовать List(Of Foo) ... Он уже находится в VB.NET под System.Collections.Generic. Чтобы использовать, просто объявите как таковой:
Private myList As New List(Of Foo) 'Creates a Foo List'
Private myIntList As New List(Of Integer) 'Creates an Integer List'
См. MSDN > List(T) Class (System.Collections.Generic) для получения дополнительной информации.
Вам нужно было реализовать свойство по умолчанию для коллекции следующим образом:
Default Public Property Item(ByVal Index As Integer) As Foo
Get
Return CType(List.Item(Index), Foo)
End Get
Set(ByVal Value As Foo)
List.Item(Index) = Value
End Set
Конечная собственность
Это зависит от того, что он делает. List <T> предназначен для внутреннего использования в коде приложения. Вам следует избегать написания общедоступных API, которые принимают или возвращают List <T> --consider, используя вместо этого суперкласс или интерфейс коллекции.