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

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

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

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

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

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

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


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

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

5   голосов , оценка 4 из 5
Похожие ответы