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

Автор: admin | 20 Июнь 2008 – 19:43 -


Урок 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();
        }

Запускаем программу.


Tags: , , , , , , , , , , ,
Находится в Windows и C# | No Comments »

Ответить

Вы должны быть в системе, дабы комментировать.


C# — язык программирования, сочетающий объектно-ориентированные и аспектно-ориентированные концепции. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств вроде Visual Studio. Лучшее обучение на инженера по охране труда СПб. . пластиковые бутылки поделки своими руками C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к С++ и Java. Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели на функции-члены классов, атрибуты, события, свойства, исключения, комментарии в формате XML. Переняв многое от своих предшественников — языков С++, Java, Delphi, Модула и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++).