2015-12-10 1 views
0

УчитываяКак отключить класс до его базового типа для установки значений с помощью Activator.CreateInstance?

//all types of T inherit class name of BaseClass... 
public void Test<T>(Action<T> CallBack){ 
    var obj = (T) Activator.CreateInstance<T>(); 
    //Debugger shows obj of proper type and shows its proper baseclass 
    //now I want to change the base class and pass in a value to affect content 
    var bc = new BaseClass("Parameter1"); 
    //downcast the original obj to type of baseclass 
    var bcObj = (BaseClass)obj;  
    //and assign the downcast object the new BaseClass 
    bcObj = bc; 
    //debugger shows bcObj IS the same as bc.. 
    //but callback will not send the new bcObj content...  
    CallBack(obj); 
} 

Проблема

Когда CallBack происходит изменение базового класса нет! То, что видно, это тот же контекст базового класса, что и сразу после Activator.Creatinstance.

Вопрос

Разве это не возможно обратное приведение объекта и присвоить значение к нему из другого экземпляра класса этого типа?

Возможное решение

Я мог бы содержать BaseClass в супер класс вместо наследования.

+0

Вы никогда не устанавливали никаких значений на obj или bcObj, так почему вы ожидаете каких-либо изменений? –

+0

Я не понимаю. В чем смысл всего этого кода 'bc'? Вы также можете удалить все после строки 'Activator.CreateInstance' до строки до' Callback (obj) ' – MickyD

+0

Обратите внимание, что тип T все наследует BaseClass, я пытаюсь внедрить новый BaseClass в родительский класс. –

ответ

0

Идея; Я думал, должен был работать, но не сделал. Тем не менее, это немного анти-шаблон. Я просто реорганизовал код для обеспечения строгого разделения проблем и создал новый класс в цепочке наследования. Это решило проблему. У меня просто было слишком много вещей, которые происходят в одном из базовых классов.

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