2011-01-30 5 views
0

У меня есть класс, как это:Вводить значение для свойства объекта во время выполнения в C#

public class ChildForm extends System.Windows.Forms.Form{ 
    public int childId; 
} 

Я называю это так:

Type baseType = Type.GetType("ChildForm"); 
System.Windows.Forms.Form formCall = (Form)System.Activator.CreateInstance(baseType); 
//How can i set childId properties here? 

ChildForm может быть много форм, поэтому Мне нужно использовать отражение и использовать родительскую форму для его отображения. Но я не знаю, как установить дочерние свойства. это можно сделать с помощью инъекций свойств?
Спасибо заранее.

+0

Я не понимаю, почему вы не можете просто создать экземпляр формы и просто установить его свойство/поле напрямую. Что вы получаете, используя отражение? Если вы не знаете тип формы, который должен быть создан, вы можете заставить всех реализовать интерфейс IChildForm, который имеет свойство ChildId. Затем вы сможете создать экземпляр формы и установить ее дочерний идентификатор без отражения. Обычно следует избегать установки значений с использованием отражения, если нет другого варианта, поскольку сложнее проверить код и определить, что вы сломаете при смене материала. –

+0

Я знаю, что это можно сделать с помощью ParentClass или интерфейса. Но я ищу другие варианты, так как код уже слишком большой, чтобы меняться. Но я буду помнить об этом, когда переписываю все. – Ivan

ответ

3

У вас есть field, а не property. И чтобы установить его значение, вы можете сделать это:

var baseType = Type.GetType("ChildForm"); 
System.Windows.Forms.Form formCall = (ChildForm)System.Activator.CreateInstance(baseType); 
baseType.GetField("childId").SetValue(formCall, 5); 
+0

Он работает как шарм! Большое спасибо. – Ivan

Смежные вопросы