C# 对象类型的转化

1、is关键字:

可以检查对象是否与特定的类型兼容,可以用它来判断对象是否为给定的类型。

定义格式为  operand is type

在上述定义中,当type是一个类,而operand也是该类型,或继承了该类型,或封箱到该类型中时,结果为true;

                            当type是一个接口类型,而operand也是该类型,或者执行该接口的类型时,结果也为true;

                            当type是一个值类型,而operand也是该类型,或者被拆箱到该类型中时,结果也为true;

转化机制:

值类型和引用类型的根本区别在于其在内存中的存储方式不同,值类型总是在内存中的栈中存储,而引用类型却是在堆栈中存储。堆栈与栈的区别在于,当定义一个值类型变量时,会在栈中分配适当大小的内存,内存中的这个空间用来存储变量所含的值;引用变量也利用栈,但这时栈包含的只是对另一个内存位置的引用,而不是实际值,这个位置是堆中的一个地址。

值类型代表基本数据类型,分为简单类型(基本数据类型)、结构(用户定义的值类型)和枚举3种。引用类型分为类、接口、数组和委托。

子类自动转化为父类和父类强制转化为子类,代码略

2、as关键字

as关键字用于在兼容的引用类型之间执行转换,把一种类型转化为指定的引用类型。与强制转换不同的是,as关键字不会引发错误。

其基本格式为:operand as type

当operand的类型时type类型、operand的类型可以隐式转化为type类型、operand的类型可以封箱到类型type类型时,operand的类型就会被转化为相应的type类型,否则operand的类型会被赋予null。

如果operand的类型可以显式转换为type,则operand的类型转换结果就是null。

3、封箱和拆箱

封箱是把值类型转化为system.object类型,或者转换为由值类型执行的接口函数。把一个值类型转换为system.object类型,也就是创建一个system.object类型实例,并将这个值复制给这个object。

拆箱转换是将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行改接口的值类型。这种转换是显式进行的,其语法类似于前面的显式类型转换。拆箱的过程分为两步,首先检查这个对象的实例,然后把这个实例的值复制给值类型的变量。

你可能感兴趣的:(C#)