我很确定以前有人问过这个问题,但不幸的是我发现的唯一的就是this https://stackoverflow.com/questions/2903450/c-sharp-how-to-dynamically-cast-an-object这对我来说不是解决方案。在我当前的项目中,我做了类似的事情:
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
因为它的类型是动态变化的。
我怎样才能动态地投射它?
三个选项:
- 如果您控制这两个类,并且可以让它们实现一个包含您需要的所有内容的通用接口,那么就这样做 - 并转换为该接口
- 如果您使用 C# 4 和 .NET 4,则可以使用动态类型 - 只需将变量声明为
private dynamic obj;
它会编译并在执行时找到正确的方法
- 否则,使用反射来查找并调用该方法。
基本上casting基于执行时间类型没有意义,因为强制转换的一部分目的是给出compiler更多信息...而在这种情况下您根本没有这些信息。
如果你能实现的话,第一个选项是迄今为止最好的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)