繁体   English   中英

我们可以将一种用户定义的数据类型(子类)转换为另一种自定义数据类型(父类)

[英]Can we convert one User defined datatype (Child class) to another custom data type (Parent) Downcasting

我们可以装箱(从值类型到对象)向上转换,拆箱(从对象到值)向下转换。 这是有可能的,因为编译器在转换之前已经知道类型(从int到object)(从object到int),Object是.net框架中所有类的基类,因此可以向下转换,因此我们可以将一种用户定义的数据类型(Child类)转换为另一个自定义数据类型(父级)向下转换

class Customer
{

}

class GoldCustomer : Customer
{

}

下面是一个“ upcasting”代码,在该代码中,父级子级金级客户被推到了客户级。

Customer obj = new GoldCustomer(); 

下面是一个“向下转换”代码的示例,其中尝试将父类对象移动到子类对象,.NET中不允许这样做。

GoldCustomer obj = new Customer(); // not allowed illegal

如果S继承T,则引用类型S可以隐式转换为T。

您只能拆箱/施放objectint ,如果该object实际上是一个盒装int

int value = 10;
object boxedValue = (object)value;
int unboxedValue = (int)boxedValue; // works

object nonIntObject = "a string";
int unboxedValue = (int)nonIntObject; // does not work

引用类型和类型转换完全相同。 仅当实例实际上是向下转换的子类实例(或从子类派生的类)时,才可以将子类显式转换为父类。

Customer value = new GoldCustomer();
GoldCustomer childValue = (GoldCustomer)value; // works

Customer value = new Customer();
GoldCustomer childValue = (GoldCustomer)value; // does not work

客户价值=新客户(); GoldCustomer childValue =(GoldCustomer)value; //不起作用仅仅因为childValue是一个不完整的对象,它只有父内存块而不是孩子的一部分,所以它不起作用。

客户价值=新的GoldCustomer(); GoldCustomer childValue =(GoldCustomer)value; //之所以起作用,是因为现在子对象实际上指向了自己的类型,并且它具有base加child的完整内存块部分,它也不能调用它自己的部分的另一件事也意味着child调用特定属性。

子是基本类型,所以有可能。 类型兼容性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM