c#向上转换总是允许的

本文关键字:转换 | 更新日期: 2023-09-27 18:15:19

Java

"向上转换是转换为超类型,而向下转换是转换为一个亚型。超转换总是允许的,但是子转换涉及到类型检查,可以抛出ClassCastException。"

(关于类变量的上、下转换有什么区别)

c# 中是否也允许总是 ?

c#向上转换总是允许的

是的,这是允许的,因为子类是祖先类的特殊化。

的例子:

让我们考虑当我们有一个class称为Bird,另一个称为Sparrow和第三个Eagle时的情况。SparrowEagle继承自BirdSparrowsEagles差别很大,但它们都是Bird。因此,如果出于某种原因,您希望Collection属于Bird s,那么您可以同时在Collection中拥有EagleSparrow对象,因为它们仍然是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;

技术上,TypedReferenceObject:

 Object
   ValueType
     TypedReference

你可以很容易地检查它:

 Console.Write(typeof(TypedReference).BaseType.BaseType == typeof(Object) 
   ? "TypedReference derived from Object via ValueType" 
   : "Very strange");

,但为了表示为Object实例(通过cast),它应该是,这是不能做到的。