2013-03-12 4 views
0

У меня есть метод, когда мне нужно динамически изменять класс, используемый в зависимости от пользовательских настроек, как показано ниже, класс dEnvelope должен также инициализировать свои свойства, чтобы заполнить все подклассы и использовать их одинаково эти различные классы года имеют точную структуру, но бизнес-логика отличается в своих внутренних методахИнициализировать классы динамических типов

dynamic dEnvelope; 

    if (UserYear==2013) 
     dEnvelope = new Years.Y2013.DataEnvelope(); 
    else 
     dEnvelope = new Years.Y2012.DataEnvelope(); 


    dEnvelope.InnerClass= Activator.CreateInstance(Type.GetType(dEnvelope.InnerClass)); 

Однако я получаю сообщение об ошибке при выполнении Activator.CreateInstance линии

{ "Значение не может быть пустым. \ r \ nParameter name: typeName "}

Я что-то пропустил от использования динамического типа? Есть ли лучший способ динамического выбора правильного класса, который будет использоваться во время выполнения?

ответ

0

Я думаю, что вы должны сначала инициализировать переменную класса «Годы» через конструктор, и вы должны попытаться получить доступ к этому методу. то есть dEnvelope = new Years().Y2013.DataEnvelope();

А также, пожалуйста, покажите фрагмент кода для лучшего понимания.

+0

Years.Y2013 и Years.Y2012 - это пространства имен, не являющиеся классами. – Maya

+1

это нулевой указатель; Type.GetType ("namespace.qualified.TypeName") работает только тогда, когда тип найден в файле mscorlib.dll или в текущей исполняемой сборке. Проверьте код –

+0

dEnvelope.InnerClass = Activator.CreateInstance (Type.GetType (dEnvelope.InnerClass)); –

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