2010-07-27 20 views
5

我有這樣使用<T>類的屬性聲明在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; 

這裏的一類,我propblem正在使數據源可以接受任何輸入級。我如何才能正確地爲Tbl類聲明數據源?

非常感謝

回答

11

如果是Tbl<T>,你可能會選擇公開IList<T>DataSource

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

對於非通用數據你可能選擇使用非通用IList ;然而,在覈心框架中,使用object作爲DataSource是相當常規的,因爲這允許使用IListIListSource(圍繞獲取列表的抽象)。

+0

我用這種方式,但問題是,當我宣佈另一個類 公共類Db的 { public list > Table {get;設置;} } 它不能在這種情況下站在T.但我不想用那種方式 public class Db { public list > Table {get;設置;} } – akari 2010-07-27 08:04:50

+0

@ user402050;假設這些表格都是不同的類型(這似乎是合理的),您如何期望它們的列表類型相同?它不能這樣做。所以要麼使用'IList',要麼有*一些涉及抽象的'Tbl'和具體的'Tbl '的替代方案(但是當它通過'Tables'訪問時它將是非泛型的) – 2010-07-27 09:06:14

2

您使用類型Object

public object Datasource { get; set; } 

如果你想使用泛型指定類型:

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

我猜測他們想要不止一個'T' ... – 2010-07-27 07:38:08

+0

@Marc Gravell:是的,但T可以是任何類型的集合,不限於單個類或接口;使用Object的通用版本。當然,你通常想要更多的選擇; IList 比T只有更多的自我記錄。 – Guffa 2010-07-27 15:52:01