C# 对象类型的转化
2015-11-23 15:01
316 查看
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。
拆箱转换是将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行改接口的值类型。这种转换是显式进行的,其语法类似于前面的显式类型转换。拆箱的过程分为两步,首先检查这个对象的实例,然后把这个实例的值复制给值类型的变量。
可以检查对象是否与特定的类型兼容,可以用它来判断对象是否为给定的类型。
定义格式为 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# GridViewExportUtil
- C#6.0新特性之字符串嵌入 String Interpolation
- C# CookieHelper
- C#利用子窗体中的构造函数 (实现了父窗体给子窗体的传值,但是子窗体的值回传暂未实现)
- C# Upload
- C# ImageHelper
- C# 枚举 位运算 [Flags]标签
- 【C#语言学习】学习一门语言
- CLR中的程序集加载
- 关于C#引用Dll后,找不到命名空间的问题
- C# 多态性
- C# 类的继承
- 《CLR中的程序集加载》
- C#调用endtask
- c#查找窗口的两种办法
- c#调用GetModuleFileNameEx获取进程路径
- C# ——List<Enum> 转化为List<string>
- C#对象序列化与反序列化
- 关于API的C#实现
- C#: static关键字的作用