可能重复:
Typecasting in C#
如何在c#中强制转换?
答案 0 :(得分:11)
您只需使用普通(强制转换)运算符:
class HigherTypeInHierarchy {}
class LowerTypeInHierarchy : HigherTypeInHierarchy {}
var lowerTypeInHierarchy = new LowerTypeInHiearchy();
// OK downcast:
HigherTypeInHierarchy someObject = lowerTypeInHierarchy;
var okDowncast = (LowerTypeInHiearchy)someObject; // OK
当然,为了使转换有效,您尝试强制转换的对象必须是您所投射的类型,否则您将获得运行时异常:
class AnotherLowerTypeInHierarchy : HigherTypeInHierarchy {}
var anotherLowerTypeInHierarchy = new AnotherLowerTypeInHiearchy();
// Failing downcast:
HigherTypeInHierarchy someObject = anotherLowerTypeInHierarchy;
var failedDowncast = (LowerTypeInHiearchy)someObject; // Exception!
如果您只是想“尝试投射”(即准备处理您尝试向下转换的类型实际上不是指定类型的情况,请使用作为 -cast代替:
var lowerTypeInHiearchyOrNULL = someObject as LowerTypeInHiearchy;
向下转换通常是一个坏主意,因为它意味着知道类型系统之外的类型。层次结构中较高级别的操作应该对所有派生类型都有效(请参阅Liskov substitution principle),但通过向下转换,您可以说明该类型实际上是特定派生类型的相反要求。
答案 1 :(得分:3)
Class Animal { }
Class Dog : Animal { }
Dog dog = new Dog();
Animal animal = dog; //upcasting
Dog sameDog = (Dog)animal; //Downcasting
答案 2 :(得分:1)
http://igoro.com/archive/fun-with-c-generics-down-casting-to-a-generic-type/
查看上面的网址。
另外,认为@Barry发布的链接将是我链接的第二选择,因为这是一个非常简单的例子。