我很确定之前有人问过,但遗憾的是,我发现{唯一} this对我来说不是解决方案。在我目前的项目中,我做了类似的事情:
private object obj;
private void Initialize()
{
obj.Initialize();
}
private void CreateInstanceA()
{
obj = Activator.CreateInstance(typeof(MyClassA));
}
private void CreateInstanceB()
{
obj = Activator.CreateInstance(typeof(MyClassB));
}
此代码当然不起作用,因为我没有强制转换obj
,因为它的类型会动态更改。
如何动态投射?
答案 0 :(得分:9)
三个选项:
private dynamic obj;
,它将在执行时编译并找到正确的方法基于执行时间类型基本上强制转换没有意义,因为强制转换的一部分是给编译器更多信息......而你在这种情况下根本就没有。
如果你可以实现它,那么第一个选项是迄今为止最好的选择。
答案 1 :(得分:0)
我认为CreatInstanceB()实际上应该使用MyClassB,对吗?
在这种情况下,您可以使用:
((MyClassA)obj).Initialize();
...
((MyClassB)obj).Initialize();
或者您可以创建一个具有Initialize方法的接口,并将obj定义为该接口。