C#中的向上转换

时间:2013-04-08 13:44:54

标签: c# value-type downcast

我们是否可以将值转换为int转换为float转换为upcasting,并将float转换为int作为向下转换?我相信当我们谈论向上转发和向下倾斜时,我们特别指的是参考转换。

4 个答案:

答案 0 :(得分:9)

不,值类型之间的转换不能被视为向上转换或向下转换,因为它们不共享分层链接(它们不以任何方式或形式相互继承)。

上传意味着您要将子类型引用更改为超类型引用。

向下倾斜是另一种方式。

答案 1 :(得分:0)

不,浮点数不是int的特例(I.E.子类)。它们是不同的类型。

答案 2 :(得分:0)

不,上传和下传仅在继承环境中有效。当您在可以容纳更多或更少数据的值类型之间进行转换时,您正在使用普通类型转换。其中,有两种不同的类型:  1.隐性转换。这些转换可以在转换“安全”时进行,即不会丢失数据。例如,您可以安全地将int值转换为long值。  2.明确的转换。这些转换可能导致数据丢失,因此您必须进行显式转换才能进行转换。例如,将long值转换为int是不安全的。

有关更多信息,请参阅:http://msdn.microsoft.com/en-us/library/ms173105.aspx

答案 3 :(得分:0)

正如其他人所描述的那样,这些不是向上转发和向下转发的例子。但是,我们可以讨论扩展和缩小基本类型转换(例如,从int到long是一个扩展转换,因此可以隐式完成。)但是在这种特殊情况下(float / int),转换有点不同。

存在从int到float的隐式转换,但由于float无法准确表示整数,转换实际上仍然会失去精度。这是值得了解的,因为它突破了隐含转换永远不会丢失信息的一般规则。如果你将整数转换为浮点数,用它们做一堆累积数学然后尝试转换回int,这真的很明显。在这些情况下,如果假设浮点数是十进制数的完美表示,则近似误差可能会累积,从而产生不正确的结果。