У меня есть базовый абстрактный класс и его параметр абстрактного типа:
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 {
...
}
Затем у меня есть ряд дочерних классов, присущих ему:
public class ShopDatabase : Database<ShopItem> {}
public class ShopItem : DatabaseItem {}
public class WeaponDatabase : Database<WeaponItem> {}
public class WeaponItem : DatabaseItem {}
...
Теперь я хочу поместить Dictionary для отслеживания баз данных и метод их возврата с использованием типа DatabaseItem, примерно так:
Dictionary<Type, Database<DatabaseItem>> databases;
public static Database<T> GetDatabase<T> () where T: DatabaseItem {
return databasebases [typeof (T)];
}
Затем он дал мне ошибку «'T' должен быть неабстрактным типом с общедоступным конструктором без параметров, чтобы использовать его как параметр 'T'», потому что DatabaseItem является абстрактным . Я сделал DatabaseItem неабстрактным типом, ошибка исчезла, но все равно появилось много ошибок преобразования типа ...
Нашел аналогичный вопрос но я все еще не понимаю ...
Какое решение / структура лучше для этого?