始终允许c#upcasting

时间:2016-10-27 13:48:49

标签: java c# casting polymorphism

Java

  

"向上转换正在转换为超类型,而向下转换正在转换为   一个子类型。总是允许超广播,但是转播涉及到   键入check并抛出ClassCastException。"

What is the difference between up-casting and down-casting with respect to class variable

C#中是否 允许上传?

3 个答案:

答案 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;

从技术上讲,TypedReferenceObject

 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,第三名为EagleSparrowEagle继承自BirdSparrowsEagles大不相同,但它们是Bird。因此,如果您出于某种原因想要Collection Bird,那么您可以在Eagle内同时拥有SparrowCollection个对象时间,因为它们仍为Birds,只有特定 Bird