我正在运行以下代码:
public class CfgObject
{
protected object _inst;
public CfgObject(object inst) { _inst = inst; }
}
public class CfgService : CfgObject
{
public object GetObject() { return _inst; }
public CfgService(object inst) : base(inst) {}
}
...
CfgObject obj1 = new CfgObject((object)1);
CfgService service = (CfgService)obj1;
service.GetObject();
...
我总是收到
System.InvalidCastException(无法将类型为'CfgObject'的对象强制转换为'CfgService')
正确的做法是什么?
答案 0 :(得分:1)
您无法从CfgObject
投射到CfgService
,只能从CfgService
投射到CfgObject
。
转换总是从派生类到基类完成。
答案 1 :(得分:0)
如果您真的想要CfgService
的实例,则需要创建CfgService
的实例。如果创建超类型(基础),则无法将其转换为子类型。您可以执行以下操作,但这样做毫无意义,因为您可以将obj1
声明为CfgService
。
CfgObject obj1 = new CfgService((object)1);
CfgService service = (CfgService)obj1;
service.GetObject();