c#向上转换总是允许的
本文关键字:转换 | 更新日期: 2023-09-27 18:15:19
在Java,
"向上转换是转换为超类型,而向下转换是转换为一个亚型。超转换总是允许的,但是子转换涉及到类型检查,可以抛出ClassCastException。"
(关于类变量的上、下转换有什么区别)
在 c# 中是否也允许总是 ?
是的,这是允许的,因为子类是祖先类的特殊化。
的例子:
让我们考虑当我们有一个class
称为Bird
,另一个称为Sparrow
和第三个Eagle
时的情况。Sparrow
和Eagle
继承自Bird
。Sparrows
和Eagles
差别很大,但它们都是Bird
。因此,如果出于某种原因,您希望Collection
属于Bird
s,那么您可以同时在Collection
中拥有Eagle
和Sparrow
对象,因为它们仍然是Birds
,如果只是特定的 Bird
s。
是,允许向上转换:-)
类型转换(c#编程指南)
OOP原则声明总是向上转换;然而,与Java的原语类数量非常有限的不同,。Net实现允许声明struct
类型,其中一些是奇怪的反例,装箱:
TypedReference reference = new TypedReference();
// Compile time error here! Even if Object is the base type for all types
Object o = (Object)reference;
技术上,TypedReference
是Object
:
Object
ValueType
TypedReference
你可以很容易地检查它:
Console.Write(typeof(TypedReference).BaseType.BaseType == typeof(Object)
? "TypedReference derived from Object via ValueType"
: "Very strange");
,但为了表示为Object
实例(通过cast),它应该是框,这是不能做到的。