C# 如何在c中向下转换

C# 如何在c中向下转换,c#,C#,可能重复: 我如何在c中向下转换 看看上面的URL 另外,我认为@Barry发布的链接将是我的第二选择,因为这是一个非常简单的例子 看看上面的URL 另外,我认为@Barry发布的链接将是我链接的第二选择,因为这是一个非常简单的例子。您只需使用普通的cast操作符: class HigherTypeInHierarchy {} class LowerTypeInHierarchy : HigherTypeInHierarchy {} var lowerTypeInHierarchy = ne

可能重复:

我如何在c中向下转换

看看上面的URL

另外,我认为@Barry发布的链接将是我的第二选择,因为这是一个非常简单的例子

看看上面的URL


另外,我认为@Barry发布的链接将是我链接的第二选择,因为这是一个非常简单的例子。

您只需使用普通的cast操作符:

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!
如果您只想尝试强制转换,即准备处理您尝试强制转换的类型实际上不是指定类型的情况,请使用“强制转换”:

var lowerTypeInHiearchyOrNULL = someObject as LowerTypeInHiearchy;

向下转换通常是一个坏主意,因为它意味着类型系统之外的类型知识。层次结构中更高级别上的操作应该对所有派生类型都同样有效,请参见,但是通过向下转换,您可以声明一个相反的要求,即该类型实际上是特定的派生类型。

您只需使用普通转换运算符:

class HigherTypeInHierarchy {}
class LowerTypeInHierarchy : HigherTypeInHierarchy {}

var lowerTypeInHierarchy = new LowerTypeInHiearchy();

// OK downcast:
HigherTypeInHierarchy someObject = lowerTypeInHierarchy;
var okDowncast = (LowerTypeInHiearchy)someObject; // OK
Class Animal {  }

Class Dog : Animal {  }

Dog dog = new Dog();
Animal animal = dog; //upcasting
Dog sameDog = (Dog)animal; //Downcasting
当然,要使强制转换有效,您尝试强制转换的对象必须是您强制转换到的类型,否则将出现运行时异常:

class AnotherLowerTypeInHierarchy : HigherTypeInHierarchy {}
var anotherLowerTypeInHierarchy = new AnotherLowerTypeInHiearchy();

// Failing downcast:
HigherTypeInHierarchy someObject = anotherLowerTypeInHierarchy;
var failedDowncast = (LowerTypeInHiearchy)someObject; // Exception!
如果您只想尝试强制转换,即准备处理您尝试强制转换的类型实际上不是指定类型的情况,请使用“强制转换”:

var lowerTypeInHiearchyOrNULL = someObject as LowerTypeInHiearchy;

向下转换通常是一个坏主意,因为它意味着类型系统之外的类型知识。层次结构中较高级别上的操作应该对所有派生类型都同样有效,请参见,但是通过向下转换,您可以声明一个相反的要求,即该类型实际上是特定的派生类型。

其中类LowerTypeInHierarchy{/*code*/}和类HigherTypeInHierarchy:LowerTypeInHierarchy{/*code*/}@ralf Yes,应该指出这一点-相应地编辑示例。如果类LowerTypeInHierarchy{/*code*/}和类HigherTypeInHierarchy:LowerTypeInHierarchy{/*code*/}@ralf Yes,应该指出这一点-相应地编辑示例。
Class Animal {  }

Class Dog : Animal {  }

Dog dog = new Dog();
Animal animal = dog; //upcasting
Dog sameDog = (Dog)animal; //Downcasting