2008-10-10 30 views
9

Tôi muốn tạo một bộ sưu tập trong VB.NET, nhưng tôi chỉ muốn nó chấp nhận các đối tượng thuộc một kiểu nhất định. Ví dụ, tôi muốn tạo một lớp có tên là "FooCollection" có vai trò như một bộ sưu tập theo mọi cách, nhưng chỉ chấp nhận các đối tượng kiểu "Foo".VB.NET Bộ sưu tập kiểu mạnh

Tôi nghĩ tôi có thể làm điều này sử dụng Generics, bằng cách sử dụng cú pháp sau:

Public Class FooCollection(Of type As Foo) 
     Inherits CollectionBase 

     ... 

    End Class 

Nhưng tôi nhận được một lỗi khi tôi biên dịch nó mà tôi "phải thực hiện một accessor mặc định", do đó rõ ràng có điều gì đó mất tích. Tôi không muốn chỉ định kiểu nó chấp nhận khi tôi khởi tạo - tôi muốn chính FooCollection cụ thể là nó chỉ chấp nhận các đối tượng Foo. Tôi đã nhìn thấy nó được thực hiện trong C# với một danh sách mạnh mẽ đánh máy, vì vậy có lẽ tất cả tôi đang tìm kiếm là cú pháp VB.NET.

Cảm ơn sự giúp đỡ của bạn!

EDIT: Cảm ơn bạn đã trả lời. Điều đó sẽ làm điều đó, nhưng tôi muốn có các classtype tên một cách nào đó, tôi thực sự thực hiện chính xác những gì tôi đang tìm kiếm với đoạn mã sau:

Public Class FooCollection 
    Inherits List(Of Foo) 

End Class 

Trả lời

10

Tại sao bạn không chỉ cần sử dụng một List(Of Foo) .. Nó đã có trong VB.NET theo System.Collections.Generic. Để sử dụng, chỉ cần khai báo như vậy:

Private myList As New List(Of Foo) 'Creates a Foo List' 
Private myIntList As New List(Of Integer) 'Creates an Integer List' 

Xem MSDN > List(T) Class (System.Collections.Generic) để biết thêm thông tin.

+0

Nó phụ thuộc vào những gì ông ấy đang làm. Danh sách được thiết kế để sử dụng nội bộ trong mã ứng dụng. Bạn nên tránh viết các API công cộng chấp nhận hoặc trả lại Danh sách - thay vào đó, sử dụng siêu lớp hoặc giao diện bộ sưu tập. –

1

Bạn cần thiết để thực hiện một tài sản mặc định cho bộ sưu tập như thế này:

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 

Cuối bất động sản