对象派生类中的转换对象基类

时间:2014-03-26 16:17:27

标签: c# .net

我正在运行以下代码:

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')

正确的做法是什么?

2 个答案:

答案 0 :(得分:1)

您无法从CfgObject投射到CfgService,只能从CfgService投射到CfgObject。 转换总是从派生类到基类完成。

答案 1 :(得分:0)

如果您真的想要CfgService的实例,则需要创建CfgService的实例。如果创建超类型(基础),则无法将其转换为子类型。您可以执行以下操作,但这样做毫无意义,因为您可以将obj1声明为CfgService

CfgObject obj1 = new CfgService((object)1);
CfgService service = (CfgService)obj1;
service.GetObject();