如何将 class 向下转换为其基类型以使用 Activator.CreateInstance 设置值?
How do I downcast a class to its base type to set values using 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 发生时,基数 class 的变化消失了!看到的是在 Activator.Creatinstance 之后看到的相同基础 class 上下文。
问题
是否无法向下转换对象并从该类型的另一个 class 实例为其赋值?
可能的解决方案
我可以在超 class 中包含基础 class 而不是继承。
想法;我想,应该工作但没有。然而,它确实有点反模式。我只是简单地重构了代码以确保关注点的严格分离,并在继承链中创建了一个新的 class 。那解决了问题。我只是在其中一个 classes.
中发生了太多事情
给定
//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 发生时,基数 class 的变化消失了!看到的是在 Activator.Creatinstance 之后看到的相同基础 class 上下文。
问题
是否无法向下转换对象并从该类型的另一个 class 实例为其赋值?
可能的解决方案
我可以在超 class 中包含基础 class 而不是继承。
想法;我想,应该工作但没有。然而,它确实有点反模式。我只是简单地重构了代码以确保关注点的严格分离,并在继承链中创建了一个新的 class 。那解决了问题。我只是在其中一个 classes.
中发生了太多事情