Я хочу создать коллекцию реестра, в которой я мог бы сохранить некоторые классы, управляемые данными, и легко их извлечь. Первой мыслью было сохранить их с указанным c идентификатором, но другим способом было сохранить их тип, чтобы я мог получить их напрямую с помощью приведения.
public class RegistryCollection<T> : Dictionary<Type, T> , IRegistryCollection where T : class {
public void Register<A>(T entry) {
this[typeof(A)] = entry;
}
public void Register(T entry) {
this[typeof(T)] = entry;
}
public A Get<A>() where A : class {
return this[typeof(A)] as A;
}
}
public interface IRegistryCollection {
T Get<T>() where T : class ;
}
public interface IRegistryCollection<T> : IRegistryCollection { }
Небольшой пример :
RegistryCollection<Item> itemsRegistry = new RegistryCollection<Item>();
itemsRegistry.Register<ItemChildExample>(new ItemChildExample());
itemsRegistry.Register(new ItemSecondExample());
ItemSecondExample item = itemsRegistry.Get<ItemSecondExample>();
Хочу узнать ваше мнение, так как Кастинг не всегда лучший выбор, и если они уже были в какой-то коллекции, то это делает.
Спасибо.
++
abstract class Item {
}
class ItemChildExample : Item { }
class ItemSecondExample : Item { }