typeof运算符以及空接合运算符,运算符的优先级

typeof运算符返回一个表示特定类型的System.Type对象。例如,typeof(string)返回表示System.String类型的Type对象。
在使用反射技术动态查找对象的信息时,这个运算符是很有效的。
6.1.8  接下来介绍可空类型和运算符
对于布尔类型,可以给它指定true或false值。但是,要把该类型的值定义为undefined,该怎么办?此时使用可空类型可以给应用程序提供一个独特的值。
如果在程序中使用可空类型,就必须考虑null值在与各种运算符一起使用时的影响。通常可空类型与一元或二元运算符一起使用时,如果其中一个操作数或两个操作数都是null,其结果就是

null。例如:
int? a = null;
int? b = a + 4;      // b = null
int? c = a * 5;      // c = null
但是在比较可空类型时,只要有一个操作数是null,比较的结果就是false。即不能因为一个条件是false,就认为该条件的对立面是true,这在使用非可空类型的程序中很常见。例如:
int? a = null;
int? b = -5;
if (a >= b)
Console.WriteLine("a >= b");
else
Console.WriteLine("a < b"); 

null值的可能性表示,不能随意合并表达式中的可空类型和非可空类型,详见本章后面的内容。
6.1.9  空接合运算符
空接合运算符(??)提供了一种快捷方式,可以在处理可空类型和引用类型时表示null值。这个运算符放在两个操作数之间,
第一个操作数必须是一个可空类型或引用类型,第二个操作数必须与第一个操作数的类型相同,或者可以隐含地转换为第一个操作数的类型。
空接合运算符的计算如下:如果第一个操作数不是null,
则整个表达式就等于第一个操作数的值。但如果第一个操作数是null,则整个表达式就等于第二个操作数的值。例如:
int? a = null;
int b;
b = a ?? 10;     // b has the value 10
a = 3;
b = a ?? 10;     // b has the value 3 
如果第二个操作数不能隐含地转换为第一个操作数的类型,就生成一个编译错误。
6.1.10  接下来介绍运算符的优先级
表6-3显示了C#运算符的优先级。表顶部的运算符有最高的优先级(即在包含多个运算符的表达式中,最先计算该运算符):
表  6-3
组 运  算  符
初级运算符 () . [] x++ x––  new  typeof  sizeof  checked  unchecked
一元运算符 +  – !  ~  ++x  ––x和数据类型转换
乘/除运算符 *  /  %
加/减运算符 +  –
移位运算符 <<  >>
关系运算符 <  >  <=  >=  is as
比较运算符 = =  !=
按位AND运算符 &
按位XOR运算符 ^
按位OR运算符 |
布尔 AND运算符 &&
布尔OR运算符 ||
条件运算符 ?:
赋值运算符 =  += –=  *=  /=  %=  &=  |=  ^=  <<=  >>=  >>>=

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值