Cum*_*yah 11
你只需使用普通(强制转换)运算符:
class HigherTypeInHierarchy {}
class LowerTypeInHierarchy : HigherTypeInHierarchy {}
var lowerTypeInHierarchy = new LowerTypeInHiearchy();
// OK downcast:
HigherTypeInHierarchy someObject = lowerTypeInHierarchy;
var okDowncast = (LowerTypeInHiearchy)someObject; // OK
Run Code Online (Sandbox Code Playgroud)
当然,为了使强制转换有效,您尝试强制转换的对象必须是您所投射的类型,否则您将获得运行时异常:
class AnotherLowerTypeInHierarchy : HigherTypeInHierarchy {}
var anotherLowerTypeInHierarchy = new AnotherLowerTypeInHiearchy();
// Failing downcast:
HigherTypeInHierarchy someObject = anotherLowerTypeInHierarchy;
var failedDowncast = (LowerTypeInHiearchy)someObject; // Exception!
Run Code Online (Sandbox Code Playgroud)
如果您只是想"尝试强制转换"(即准备处理您尝试向下转换的类型实际上不是指定类型的情况,请使用as -cast代替:
var lowerTypeInHiearchyOrNULL = someObject as LowerTypeInHiearchy;
Run Code Online (Sandbox Code Playgroud)
向下转换通常是一个坏主意,因为它暗示了类型系统之外的类型的知识.层次结构中较高级别的操作应该对所有派生类型都有效(请参阅Liskov替换原则),但通过向下转换,您可以声明该类型实际上是特定派生类型的相反要求.