2010-07-27 4 views
5

ho una classe come questaUsa <T> nella proprietà della classe dichiarare in 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; 

Ecco, il mio propblem sta facendo l'origine dati può accettare qualsiasi Classe di ingresso. Come posso dichiarare il Datasource per la classe Tbl in modo corretto?

Grazie molto

risposta

11

Se fosse Tbl<T>, si potrebbe scegliere di esporre IList<T> come DataSource:

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

Per i dati non generico si potrebbe scegliere di utilizzare il non generico IList ; tuttavia, nel framework principale è piuttosto normale utilizzare object come DataSource, in quanto ciò consente l'utilizzo sia di IList sia di IListSource (un'astrazione attorno al recupero di un elenco).

+0

ho usato in questo modo, ma problema è quando dichiaro un'altra classe public class Db { elenco pubblico > Tabella {get; set;} } In questo caso non può essere supportato da T. Ma non voglio usare in questo modo classe pubblica Db { elenco pubblico > Tabella {get; set;} } – akari

+0

@ user402050; supponendo che le tabelle siano di diverso tipo (che sembra ragionevole), come ti aspetti di avere una lista di esse digitate allo stesso modo? Non può essere fatto * abbastanza * così. Quindi usa 'IList', o ci * sono * alcune alternative che implicano un' Tbl' astratto e un concreto 'Tbl ' (ma ancora una volta, sarà non generico quando si accede attraverso 'Tabelle') –

2

si utilizza il tipo Object:

public object Datasource { get; set; } 

Se si desidera utilizzare farmaci generici per specificare il tipo:

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

Immagino che siano voglio più di un singolo 'T' ... –

+0

@Marc Gravell: Sì, ma T potrebbe essere qualsiasi tipo di raccolta, non limitata a una singola classe o interfaccia; la versione generica dell'utilizzo di Object. Certo, spesso vuoi l'opzione più limitata; IList è più auto-documentante di solo T. – Guffa

Problemi correlati