如何使用Activator.CreateInstance将类转发为其基类型以设置值?

时间:2015-12-10 00:39:05

标签: c# callback polymorphism downcast activator

鉴于

//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之后看到的相同的基类上下文。

问题

是否无法向下转换对象并从该类型的另一个类实例为其分配值?

可能的解决方案

我可以在超类中包含基类而不是继承。

1 个答案:

答案 0 :(得分:0)

这个想法;我想,应该有效,但没有。然而,这确实是一种反模式。我只是重构代码以确保严格分离关注点并在继承链中创建一个新类。这解决了这个问题。我只是在其中一个基类中进行了太多的事情。