C # Как я могу сохранить конструктор класса в словаре

#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. Большое спасибо. Это отлично работает для моего случая. 👍