воскресенье, 8 мая 2011 г.

Как передать имя класса в качестве параметра

Вводная: надо было передать НЕ статический класс в качестве параметра. Но при передаче класса он выводит ошибку - "Поле являющиеся типом используется как переменная". Есть два пути - использовать делегаты или восстанавливать по имени. Первый способ ООП правильный, а мы воспользуемся вторым -

Для примера - представим, что у нас есть MDI приложение и нам надо создать несколько разных окон с одинаковым набором параметров. Можно для каждого окна копипастом прописать, а можно сделать так -


private void window1ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            openMDIform("Form2");
        }
 
        private void form5ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            openMDIform("Form5");
        }
 
        private void openMDIform(string name)
        {
                //по переданному имени формы узнаём имя класса с помощью
                //(Form)Activator.CreateInstance(Type.GetType(Assembly.GetExecutingAssembly().GetName().Name + "." + name))
                //и создаём
 
                Form form = (Form)Activator.CreateInstance(Type.GetType(Assembly.GetExecutingAssembly().GetName().Name + "." + name));
 
                form.MdiParent = this;
                form.Show();
        }


За счёт этого можно передавать просто имя компонента, не прописывая каждый раз его свойства.