在 Java ,
中"向上转换正在转换为超类型,而向下转换正在转换为 一个子类型。总是允许超广播,但是转播涉及到 键入check并抛出ClassCastException。"
(What is the difference between up-casting and down-casting with respect to class variable)
在 C#中是否 允许上传?
答案 0 :(得分:1)
是的,允许上传: - )
答案 1 :(得分:1)
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
实例(通过强制转换),它应该是盒装,这是无法完成的。
答案 2 :(得分:1)
是的,这是允许的,因为子类是祖先类的特殊化。
示例:
让我们考虑一下,我们的class
名为Bird
,另一名名为Sparrow
,第三名为Eagle
。 Sparrow
和Eagle
继承自Bird
。 Sparrows
与Eagles
大不相同,但它们是Bird
。因此,如果您出于某种原因想要Collection
Bird
,那么您可以在Eagle
内同时拥有Sparrow
和Collection
个对象时间,因为它们仍为Birds
,只有特定 Bird
。