如何动态投射对象
本文关键字:对象 动态 何动态 | 更新日期: 2023-09-27 18:35:49
我很确定之前有人问过这个问题,但不幸的是,我发现的唯一一件事是这对我来说不是解决方案。在我目前的项目中,我做了这样的事情:
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;
,它将在执行时编译并找到正确的方法 - 否则,请使用反射来查找并调用该方法。
基本上,基于执行时间类型的强制转换是没有意义的,因为强制转换的一部分目的是为编译器提供更多信息......在这种情况下,您根本没有。
如果您可能实现第一个选项,那么第一个选项是迄今为止最好的。
我假设 CreatInstanceB() 实际上应该使用 MyClassB,对吗?
在这种情况下,您可以使用:
((MyClassA)obj).Initialize();
。
((MyClassB)obj).Initialize();
或者你可以创建一个具有 Initialize 方法的接口,并将 obj 定义为该接口。