2010-07-27 26 views
5

Tôi có một lớp học như thế nàySử dụng <T> trong thuộc tính của lớp tuyên bố trong C#

public class Tbl 
{ 
    public string Name {get; set} 
    public anyClass Datasource {get; set;} //I don't know what to use there 
} 

//Usage: 
List<anyClass> anyList = GetList(); // Assuming I had a list 
Tbl Table = new Tbl(); 
Table.Name = "Table1"; 
Table.Datasource = anyList; 

Ở đây, propblem của tôi là làm cho Datasource có thể chấp nhận bất kỳ lớp đầu vào. Làm thế nào tôi có thể khai báo Datasource cho lớp Tbl đúng cách?

Cảm ơn rất nhiều

Trả lời

11

Nếu nó là Tbl<T>, bạn có thể chọn để lộ IList<T> như DataSource:

public class Table<T> 
{ 
    public string Name {get; set} 
    public IList<T> DataSource {get; set;} 
} 

Đối với dữ liệu phi generic bạn thể chọn để sử dụng các phi generic IList ; tuy nhiên, trong khung cốt lõi, việc sử dụng object là một thông số DataSource, vì điều này cho phép sử dụng cả hai IListIListSource (sự trừu tượng xung quanh việc lấy danh sách).

+0

Tôi đã từng như vậy nhưng vấn đề là khi tôi tuyên bố lớp khác public class Db { Danh sách công khai > Bảng {get; set;} } Nó không thể đứng T trong trường hợp này. Nhưng tôi không muốn sử dụng cách đó lớp công khai Db { Danh sách công khai > Bảng {get; set;} } – akari

+0

@ user402050; giả sử các bảng là tất cả các loại khác nhau (có vẻ hợp lý), làm thế nào để bạn mong đợi để có một danh sách của họ gõ giống nhau? Nó không thể được thực hiện * khá * như thế. Vì vậy, hoặc sử dụng 'IList', hoặc có * là một số lựa chọn thay thế liên quan đến một' Tbl' trừu tượng và bê tông 'Tbl ' (nhưng một lần nữa, nó sẽ không chung khi được truy cập thông qua 'Bảng') –

2

Bạn sử dụng các loại Object:

public object Datasource { get; set; } 

Nếu bạn muốn sử dụng Generics để xác định các loại:

public class Tbl<T> { 
    public string Name { get; set } 
    public T Datasource { get; set; } 
} 
+0

Tôi đoán chúng muốn nhiều hơn một 'T' ... –

+0

@Marc Gravell: Có, nhưng T có thể là bất kỳ loại bộ sưu tập nào, không giới hạn ở một lớp hoặc giao diện đơn lẻ; phiên bản chung của việc sử dụng Object. Tất nhiên, thường bạn muốn có tùy chọn hạn chế hơn; IList tự tài liệu hơn là chỉ T. – Guffa

Các vấn đề liên quan