Передача имени класса и создание экземпляра соответствующего объекта - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! В моем приложении часто используется код:
Листинг программы
  1. if (!Dialogs.connectedToDB()) return;
  2. ImportForm imvf = new ImportForm(this);
  3. imvf.ShowDialog();
где ImportForm - один из многих классов форм ввода/редактирования данных. Конструктору в качестве параметра передается экземпляр главной формы для работы с её некоторыми объектами. Хочется не нарушать принцип Don't repeat yourself и написать общий метод для вызова дочерних форм. С помощью найденных примеров задачу решить не удаётся. Например так:
Листинг программы
  1. Type type = classObj.GetType();
  2. ConstructorInfo constructor = type.GetConstructor(new Type[] {typeof(classObj)});
  3. object newObject = constructor.Invoke(null);
  4. MethodInfo methodInfo = type.GetMethod("ShowDialog()");
  5. methodInfo.Invoke(newObject, null)
выдает ошибку: "Ссылка на объект не указывает на экземпляр объекта." Или так:
Листинг программы
  1. object apf;
  2. apf = Activator.CreateInstance(type);
  3. MethodInfo mi = type.GetMethod("ShowDialog()");
  4. mi.Invoke(apf, null);
выдает ошибку: "Ссылка на объект не указывает на экземпляр объекта." Еще пробовал так:
Листинг программы
  1. static void ShowSingleForm<TForm>(int id, DataGridView dgv, MainForm mf, Type type) where TForm : Form, new()
  2. {
  3. TForm form = Application.OpenForms.OfType<TForm>().FirstOrDefault();
  4. form = new TForm();
  5. form.Show();
  6. }
Тут проблема с передачей параметра в конструкторе. Какой из всех подходов более правильный, простой, быстрый? Пожалуйста, помогите!

Решение задачи: «Передача имени класса и создание экземпляра соответствующего объекта»

textual
Листинг программы
  1. using System;
  2.  
  3. public class Example
  4. {
  5.    public static void Main()
  6.    {
  7.       // Initialize array of characters from a to z.
  8.       Char[] chars = new Char[26];
  9.       for (int ctr = 0; ctr < 26; ctr++)
  10.          chars[ctr] = (char) (ctr + 0x0061);
  11.  
  12.       Object obj = Activator.CreateInstance(typeof(String),
  13.                                             new Object[] { chars, 13, 10 } );
  14.       Console.WriteLine(obj);                                          
  15.    }
  16. }
  17. // The example displays the following output:
  18. //       nopqrstuvw

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы