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

时间:2014-01-07 00:15:34

标签: c#

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

class Customer
{

}

class GoldCustomer : Customer
{

}

下面是一个“向上转换”代码,其中子父级黄金客户被推送到客户类别。

Customer obj = new GoldCustomer(); 

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

如果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

答案 2 :(得分:0)

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

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

孩子是基础的类型所以有可能。 类型兼容性