2014-03-26 145 views
0

我运行以下代码:角色对象基类派生的类

我总是接收

System.InvalidCastException(无法转换类型“CfgObject”的目的是键入'CfgService')

什么是正确的做法?

+0

为什么你会期望这个工作? 'obj1'不是'CfgService'。 –

回答

1

不能从CfgObject转换为CfgService,仅从CfgServiceCfgObject。 铸造总是从派生到基类完成。

+0

这不是真的(该投射总是从派生到基类完成)。尝试做'对象o = 5;例如,int i =(int)o;'。查看“upcasting”vs“downcasting” –

+0

当然,但你错过了一件事:object o =(object)5; int i =(int)o; o已经是一个int了,所以这个投射什么都不做。 –

0

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

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