#c# #dictionary
#c# #словарь
Вопрос:
Мне нужно создать объект другого класса в разных ситуациях. Поэтому я решил использовать dictionary. Я хочу увидеть что-то подобное:
var Object = new myDictionary["someString"];
где MyDictionary[«someString»] приводит к конструктору класса. Кстати, все классы в этом dict имеют один и тот же родительский класс.
Комментарии:
1. Вам следует изучить шаблон Factory.
2. Это звучит немного как проблема XY, разве вы не можете использовать внедрение зависимостей или, как предлагает Dai, шаблон factory?
3. Согласен с Dai .. также обратите внимание, что конструкторы не являются обычными методами. Сам конструктор не может быть передан по ссылке или сохранен где угодно. В этом случае я бы поместил экземпляры заводского класса в словарь для каждого созданного класса. Затем класс factory вызывается как var Object = MyDictionary[«someString»] . Создайте(…) или MyDictionary[«someString»] . CreateSomeString(…)
4. @Goodies К сожалению, мы не можем привязать конструктор к a
Func<T>
. Ворчать.5. .. что является хорошей причиной для использования заводских классов в C #. Я думаю, что в любом случае размещать указатели на функции в словаре — плохая идея. При этом все сохраненные функции должны иметь одинаковые аргументы, потому что тип функции Func<T> должен быть включен в определение словаря. Если вы используете фабричные классы, один фабричный класс может предоставлять один или несколько методов Create() для нескольких разных объектов. С помощью одного указателя на функцию результат должен быть приведен, фабрика. Create() не нужно приводить.
Ответ №1:
Вы можете использовать dictionary of Func
для создания экземпляров:
Dictionary<string, Func<BaseClass>> myDictionary = new Dictionary<string, Func<BaseClass>>
{
{"BaseClass", () => new BaseClass()}
};
var x = myDictionary["BaseClass"]();
Комментарии:
1. Большое спасибо. Это отлично работает для моего случая. 👍