我们可以装箱(值类型到对象)向上转换,拆箱(对象到值)向下转换。 这是可行的,因为编译器在转换之前已经知道了类型(int到object)(对象为int),Object是.net框架中所有类的基类所以这种向下转换可能,所以 我们可以将一个用户定义的数据类型(子类)转换为另一个自定义数据类型(父)向下转换
class Customer
{
}
class GoldCustomer : Customer
{
}
下面是一个“向上转换”代码,其中子父级黄金客户被推送到客户类别。
Customer obj = new GoldCustomer();
下面是一个“向下转换”代码的示例,其中尝试将父类对象移动到子类对象,这在.NET中是不允许的。
GoldCustomer obj = new Customer(); // not allowed illegal
答案 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)值; //有效 因为现在子对象实际上指向了自己的类型,并且它具有基本加子的完整内存块部分,还有一件事它也可以不调用它自己的部分也意味着子调用特定属性。
孩子是基础的类型所以有可能。 类型兼容性