考虑两个简单的类
public class Parent
{
public void ShowData()
{
}
}
public class Child : Parent
{
public void GetData()
{
}
}
// Upcasting -- NO ERROR
Parent objParent = new Child();
// Downcasting -- ERROR
Child objChild = new Parent();
// Downcasting -- NO ERROR
Child objNewChild = (Child)new Parent();
UpCasting
不需要explicit casting
?DownCasting
要求explicit casting
?为什么UpCasting不需要显式强制转换?
因为它总是安全的。永远不会抛出异常。
为什么DownCasting需要显式强制转换?
因为它是不是安全。它可能引发异常或丢失信息(例如long
,int
在未经检查的上下文中强制从转换为)。
编译器很乐意让您隐式地做安全的事情,但是如果您要做“危险”的事情,则需要有效地在方框中打上“我知道我在这里正在做的事情”的字样。
根据C#规范的6.1节:
预定义的隐式转换始终成功,并且永远不会引发异常。正确设计的用户定义的隐式转换也应具有这些特征。
以及第6.2节:
不是隐式转换1的显式转换是无法证明总是成功的转换,是已知可能会丢失信息的转换,以及跨足以区分为显式表示法的类型的域之间的转换。
1所有隐式转换也是显式转换。这只是使该规范的部分变得更简单的技术要点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句