![](/img/trans.png)
[英]can we define a method in parent class which can be called within a child but not the other one
[英]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。
您只能拆箱/施放object
来int
,如果该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.