Урок 21. Как создать экземпляр класса по его имени?

Часто требуется создать экземпляр некоторого класса по его имени. Например, для конфигурации некоторой программы - имя нужного класса может хранится в конфигурационном файле. Или же имя может задать пользователь в каком-нибудь диалоговом окне приложения.

В приведенном ниже примере для Windows мы сделаем это через метод CreateInstance класса Activator. Для этого примера нам понадобятся один интерфейс ISomeInterface и два производных от него класса Class1 и Class2. В принципе можно обойтись и без них, но с ними легче показать, что экземпляры наших классов Class1 и Class2 действительно создаются. Вот объявление интерфейса:

namespace WindowsApplication1

{

public interface ISomeInterface

{

void SomeMethod();

}

}

Как вы видите, мы тут ввели некоторый метод SomeMethod.

А вот объявление двух классов:

namespace WindowsApplication1

{

public class Class1: ISomeInterface

{

public void SomeMethod()

{

System.Windows.Forms.MessageBox.Show("Class1");

}

}

}

и

namespace WindowsApplication1

{

public class Class2: ISomeInterface

{

public void SomeMethod()

{

System.Windows.Forms.MessageBox.Show("Class2");

}

}

}

Как вы видите, оба эти класса являются потомками объявленного ранее интерфейса. Реализация метода SomeMethod у них очень похожа - каждый класс показывает своем имя в messagebox'е.

Теперь код, непосредственно создающий экземпляр класса по имени. Добавьте на форму кнопку и текстовое поле. В обработчике для кнопки напишите такой код (он и есть самый важный в нашем приложении):

private void button4_Click(object sender, System.EventArgs e)

{

// Получаем тип по имени.

Type t = Type.GetType("WindowsApplication1."+textBox1.Text);

// Создаем переменную по типу.

ISomeInterface w = (WindowsApplication1.ISomeInterface)

Activator.CreateInstance(t);

// Вызываем метод.

w.SomeMethod();

}

Запускаем программу. При вводе в текстовое поле имени соответствующего класса и нажатии на кнопку создастся его экземпляр - это мы увидим по соотвествующему messagebox'у:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: