C#高级编程——运算符
1.checked 和unchecked 是否检验溢出查询。
2.is运算符 检查对象是否和特定对象兼容。if(i is Object){...}
3.as运算符用于引用类型显式类型转换。
object o1="something";
object o2 = 5;
string s1=o1 as string ;// s1 = something;
string s2 = o1 as string ;//s2 =null;
4.sizeof可以确定栈中值类型需要的长度(单位字节);
5.可空类型 int? a= null ;不能因为该条件是false 就认为该条件对立面是true。
一、类型转换:
1.隐式转换- 从小往大
2.显示转换- 从大往小 long val = 3000000000; int i = (int)val;//int最大值是2147483647 i值为 -1294967296
可以用
checked long val = 3000000000;
int i = checked((int)val);//如果报错就抛出异常
再例如:无符号整数转换为char ushort c= 43; char symbol=(char)c; Console.WriteLine(symbol);
二、装箱和拆箱
C#数据类型可以分为在栈上分配内存的值类型和在堆上分配内存的引用类型 装箱和拆箱可以把值类型转换为引用类型,并把引用类型转换回值类型。
装箱: int myIntNumber=20; object myObject=myIntNumber;
拆箱: int myIntNumber=20; object myObject=myIntNumber; int mySecondNumber=(int)myObject;//只能对以前装箱的变量进行拆箱。
拆箱时应确保得到的值变量有足够的空间存储拆箱的值中的所有字段,否则会导致异常。
三、比较对象相等性
1,ReferencrEquals()方法:静态方法,测试两个引用是否引用同一个实例。
SomeClass x,y;
x=new SomeClass();
y=new SomeClass();
bool b1=ReferencrEquals(null,null);//true bool
b2 = ReferencrEquals(null,x);//false bool
b3= ReferencrEquals(x,y);//false
四、运算符重载
1.例子:
int myInteger=3;
uint myUnsignedInt=2;
double myDouble=4.0;
long myLong=myInteger+myUnsignedInt;//接收两个int参数,返回一个int,这个返回值虽有会转换为一个long
double myotherDouble=myDouble+myInteger;//同理 2.运算符重载的示例:Vector
比较运算符的重载
如果重载了“==”就必须重载“!=”