ImageVerifierCode 换一换
格式:DOCX , 页数:50 ,大小:48.86KB ,
资源ID:5826115      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-5826115.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(运算符和类型强制转换Word文档下载推荐.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

运算符和类型强制转换Word文档下载推荐.docx

1、 执行用户定义的类型转换 206.5.2 多重数据类型转换 256.6 小结 28前几章介绍了使用C#编写程序所需要的大部分知识。本章将首先讨论基本语言元素,接着论述C#语言的扩展功能。本章的主要内容如下:C#中的可用运算符处理引用类型和值类型时相等的含义基本数据类型之间的数据转换使用装箱技术把值类型转换为引用类型通过强制转换技术在引用类型之间转换重载标准的运算符,以支持对定制类型的操作给定制类型添加强制转换运算符,以支持无缝的数据类型转换 运算符C和C+开发人员应很熟悉大多数C#运算符,这里为新程序员和Visual Basic开发人员介绍最重要的运算符,并介绍C#中的一些新变化。C#支持表6

2、-1所示的运算符。表 6-1类 别运 算 符算术运算符+ * / %逻辑运算符& | & | !字符串连接运算符+增量和减量运算符+ 移位运算符比较运算符= != =赋值运算符= += = *= /= %= &= |= = & (只用于不安全代码) 命名空间别名限定符(见第2章)空接合运算符有4个运算符(sizeof、*、-、&)只能用于不安全的代码(这些代码绕过了C#类型安全性的检查),这些不安全的代码见第12章的讨论。还要注意,sizeof运算符在.NET Framework 1.0和1.1中使用,它需要不安全模式。自从.NET Framework 2.0以来,就没有这个运算符了。运算符关

3、键字sizeof(仅用于.NET Framework 1.0和1.1)运算符*、使用C#运算符的一个最大缺点是,与C风格的语言一样,赋值(=)和比较(=)运算使用不同的运算符。例如,下述语句表示x等于3:x = 3;如果要比较x和另一个值,就需要使用两个等号(=):if (x = 3)C#非常严格的类型安全规则防止出现常见的C#错误,也就是在逻辑语句中使用赋值运算符代替比较运算符。在C#中,下述语句会产生一个编译错误:if (x = 3)习惯使用宏字符&来连接字符串的Visual Basic程序员必须改变这个习惯。在C#中,使用加号+连接字符串,而&表示两个不同整数值的按位AND运算。| 则在

4、两个整数之间执行按位OR运算。Visual Basic程序员可能还没有使用过(取模)运算符,它返回除运算的余数,例如,如果x等于7,则x % 5会返回2。在C#中很少会用到指针,因此也很少用到间接寻址运算符(-)。使用它们的唯一场合是在不安全的代码块中,因为只有在此C#才允许使用指针。指针和不安全的代码见第12章。 运算符的简化操作表6-2列出了C#中的全部简化赋值运算符。 6-2运算符的简化操作等 价 于x+, +xx = x + 1x , xx = x 1x+= yx = x + yx= yx = x yx *= yx = x * yx /= yx = x / yx %= yx = x %

5、 yx = yx = x yx x = x = b)a = belsea b null值的可能性表示,不能随意合并表达式中的可空类型和非可空类型,详见本章后面的内容。 空接合运算符空接合运算符(?)提供了一种快捷方式,可以在处理可空类型和引用类型时表示null值。这个运算符放在两个操作数之间,第一个操作数必须是一个可空类型或引用类型,第二个操作数必须与第一个操作数的类型相同,或者可以隐含地转换为第一个操作数的类型。空接合运算符的计算如下:如果第一个操作数不是null,则整个表达式就等于第一个操作数的值。但如果第一个操作数是null,则整个表达式就等于第二个操作数的值。int b;b = a ?

6、 10; / b has the value 10a = 3; / b has the value 3 如果第二个操作数不能隐含地转换为第一个操作数的类型,就生成一个编译错误。 运算符的优先级表6-3显示了C#运算符的优先级。表顶部的运算符有最高的优先级(即在包含多个运算符的表达式中,最先计算该运算符): 6-3组初级运算符() . x+ x new typeof sizeof checked unchecked一元运算符+ ! +x x和数据类型转换乘/除运算符* / %加/减运算符关系运算符= is as= = !按位AND运算符按位XOR运算符按位OR运算符|布尔 AND运算符布尔OR运

7、算符|条件运算符在复杂的表达式中,应避免利用运算符优先级来生成正确的结果。使用括号指定运算符的执行顺序,可以使代码更整洁,避免出现潜在的冲突。 类型的安全性第1章提到中间语言(IL)可以对其代码强制加上强类型安全性。强类型支持.NET提供的许多服务,包括安全性和语言的交互性。因为C#这种语言会编译为IL,所以C#也是强类型的。这说明数据类型并不总是可互换的。本节将介绍基本类型之间的转换。C#还支持在不同引用类型之间的转换,允许指定自己创建的数据类型如何与其他类型进行相互转换。这些论题将在本章后面讨论。泛型是C#中的一个特性,它可以避免对一些常见的情形进行类型转换,泛型详见第9章。 类型转换我们

8、常常需要把数据从一种类型转换为另一种类型。byte value1 = 10;byte value2 = 23;byte total;total = value1 + value2;Console.WriteLine(total);在编译这些代码时,会产生一个错误:Cannot implicitly convert type int to byte (不能把int类型隐式地转换为byte类型)。问题是,我们把两个byte型数据加在一起时,应返回int型结果,而不是另一个byte。这是因为byte包含的数据只能为8位,所以把两个byte型数据加在一起,很容易得到不能存储在byte变量中的值。如果要

9、把结果存储在一个byte变量中,就必须把它转换回byte。C#有两种转换方式:隐式转换方式和显式转换方式。1. 隐式转换方式只要能保证值不会发生任何变化,类型转换就可以自动进行。这就是前面代码失败的原因:试图从int转换为byte,而潜在地丢失了3个字节的数据。编译器不会告诉我们该怎么做,除非我们明确告诉它这就是我们希望的!如果在long型变量中存储结果,而不是byte型变量中,就不会有问题了:long total; / this will compile fine这是因为long类型变量包含的数据字节比byte类型多,所以数据没有丢失的危险。在这些情况下,编译器会很顺利地转换,我们也不需要显

10、式提出要求。表6-4介绍了C#支持的隐式类型转换。 6-4源 类 型目 的 类 型sbyteshort、int、long、float、double、decimalbyteshort、ushort、int、uint、long、ulong、float、double、decimalshortint、long、float、double、decimalushortint、uint、long、ulong、float、double、decimalintlong、float、double、decimaluintlong、ulong、float、double、decimallong、ulongfloat、dou

11、ble、decimalfloatdoublecharushort、int、uint、long、ulong、float、double、decimal注意,只能从较小的整数类型隐式地转换为较大的整数类型,不能从较大的整数类型隐式地转换为较小的整数类型。也可以在整数和浮点数之间转换,其规则略有不同,可以在相同大小的类型之间转换,例如int/uint转换为 float,long/ulong转换为double,也可以从long/ulong转换回float。这样做可能会丢失4个字节的数据,但这仅表示得到的float值比使用double得到的值精度低,编译器认为这是一种可以接受的错误,而其值的大小是不会受到

12、影响的。无符号的变量可以转换为有符号的变量,只要无符号的变量值的大小在有符号的变量的范围之内即可。在隐式转换值类型时,可空类型需要额外考虑:可空类型隐式转换为其他可空类型,应遵循表6-4中非可空类型的转换规则。即int? 隐式转换为long?、float?、double?和decimal?。非可空类型隐式转换为可空类型也遵循表6-4中的转换规则,即int隐式转换为long?可空类型不能隐式转换为非可空类型,此时必须进行显式转换,如下一节所述。这是因为可空类型的值可以是null,但非可空类型不能表示这个值。2. 显式转换方式有许多场合不能隐式地转换类型,否则编译器会报告错误。下面是不能进行隐式转

13、换的一些场合:int转换为short- 会丢失数据int转换为uint- 会丢失数据uint转换为int- 会丢失数据float转换为int- 会丢失小数点后面的所有数据任何数字类型转换为char - 会丢失数据decimal转换为任何数字类型- 因为decimal 类型的内部结构不同于整数和浮点数 转换为int- 可空类型的值可以是null 但是,可以使用cast显式执行这些转换。在把一种类型强制转换为另一种类型时,要迫使编译器进行转换。类型转换的一般语法如下:long val = 30000;int i = (int)val; / A valid cast. The maximum int

14、 is 2147483647这表示,把转换的目标类型名放在要转换的值之前的圆括号中。对于熟悉C的程序员来说,这是数据类型转换的典型语法。对于熟悉C+数据类型转换关键字(如static_cast)的程序员来说,这些关键字在C#中不存在,必须使用C风格的旧语法。这种类型转换是一种比较危险的操作,即使在从long转换为int这样简单的转换过程中,如果原来long的值比int的最大值还大,就会出问题:long val = 3000000000; / An invalid cast. The maximum int is 2147483647在本例中,不会报告错误,也得不到期望的结果。如果运行上面的代码

15、,结果存储在i中,则其值为:-1294967296最好假定显式数据转换不会给出希望的结果。如前所述,C#提供了一个checked运算符,使用它可以测试操作是否会产生算术溢出。使用这个运算符可以检查数据类型转换是否安全,如果不安全,就会让运行库抛出一个溢出异常:int i = checked (int)val);记住,所有的显式数据类型转换都可能不安全,在应用程序中应包含这样的代码,处理可能失败的数据类型转换。第14章将使用try和 catch语句引入结构化异常处理。使用数据类型转换可以把大多数数据从一种基本类型转换为另一种基本类型。给price加上0.5,再把结果转换为int:double p

16、rice = 25.30;int approximatePrice = (int)(price + 0.5);这么做的代价是把价格四舍五入为最接近的美元数。但在这个转换过程中,小数点后面的所有数据都会丢失。因此,如果要使用这个修改过的价格进行更多的计算,最好不要使用这种转换;如果要输出全部计算完或部分计算完的近似值,且不希望用小数点后面的数据去麻烦用户,这种转换是很好的。下面的例子说明了把一个无符号的整数转换为char型时,会发生的情况:ushort c = 43;char symbol = (char)c;Console.WriteLine(symbol);结果是ASCII编码为43的字符,即+号。可以尝试数字类型之间的任何转换(包括char),这种转换是成功的,例如把decimal转换为cha

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2