ich eine Basis abstrakte Klasse und seiner abstrakten Typ-Parameter haben, wie:Handhabung Klassen inhärent von der abstrakten Klasse und Typ-Parameter
public abstract class Database<T> where T : DatabaseItem, new() {
protected List<T> _items = new List<T>();
protected virtual void Read (string[] cols) {
T item = new T();
...
}
public abstract class DatabaseItem {
...
}
Dann habe ich Kinder Anzahl der Klassen inhärenten von ihm haben:
public class ShopDatabase : Database<ShopItem> {}
public class ShopItem : DatabaseItem {}
public class WeaponDatabase : Database<WeaponItem> {}
public class WeaponItem : DatabaseItem {}
...
Nun möchte ich ein Dictionary setzen, um die Datenbanken zu verfolgen und eine Methode, um sie unter Verwendung DatabaseItem Typ, etwas wie folgt zurückgeben:
Dictionary<Type, Database<DatabaseItem>> databases;
public static Database<T> GetDatabase<T>() where T: DatabaseItem {
return databasebases [typeof (T)];
}
Dann gab es mir Fehler „‚T‘einen nicht-abstrakten Typ mit einem öffentlichen parameterlosen Konstruktor, um sie als Parameter‚T‘zu verwenden sein müssen“, weil DatabaseItem abstrakt ist. Ich habe DatabaseItem als nicht-abstrakten Typ, der Fehler ist weg, aber immer noch viele Fehler Typumwandlung herauskam ...
Gefunden eine ähnliche question aber ich verstehe immer noch nicht ...
Was ist besser Lösung/Struktur um dies zu erreichen?
Wahrscheinlich eine Schnittstelle für Ihre Datenbank-Klasse zu definieren, zB Dictionary –