第五章 运算符和类型强制转换
1、byte b=255 b++后b=0 溢出位被丢弃
2、unchecked是默认值 ,只有在需要把几个未检查的值放在checked中,才需要显式指定unchecked int i=checked((int)7.80F);
也可以checked{}
3、sizeof(算字节长度)、->、&、*都必须在unsafe代码中运行,font是一个整体,一般不允许直接改其个别属性
4、值类型转换,只能在数字,char、enum类型之间转换,不能把Boolean类型转换为其他类型,也不能把其他类型转换为Boolean
5、装箱把一个值类型转换为引用类型,运行库会在堆上为之建立一个引用
6、ReferenceEquals()方法是静态的(所有静态的方法都不能重写?),不能重写,只能由Object实现,它认为null相等。用于值类型都false
7、Equals是virtual ,可以重写,如果希望类实例用作字典中的键,就必须重写该方法(为什么?)重写该方法也相当于重写了静态的Equals
8、Microsoft已经重写了System.ValueType的Equals方法,使得它比较值,结构不支持用==比较,除非自己重载运算符
9、double x=8990F;double y=x+5;会把5转换为double型
10、所有运算符重载或者强制类型转换都必须声明为public static 表示它们跟类或结构相关。
11、public static Vector operator *(double d,Vector v)
{
return new Vector(d*v.x,d*v.y);
}
//如果在这里调用 Vector v=(new Vector(1,2))*70F就会由于顺序相反报错。
public static Vector operator *(Vector v,double d)
{
return d*v;
}
12、c#不允许重载=运算符
13、重载比较运算符必须成对重载,比较运算符返回的都是bool,而且如果重载的是==和!=就必须重载Equals,因为2个必须一样的逻辑,重载
比较运算符的方法的用==比用Equals安全,因为调用方法必须非null引用。(>和<、>=和<=)
14、强制类型转换,如果转换都是安全的,可以定位为隐式转换(public static implicit operator BClass (AClass a)),如果不安全的,需
要定位为显式转换(public static explicit operator BClass (AClass a))
15、c#要求数据类型转换必须定义在源类(结构)或目标类(结构)之间,而且只能在一边定义,否则编译器会混淆,而且这样可以防止第三
方类把数据类型转换引入自己中
16、多重数据类型转换后面的待看
浙公网安备 33010602011771号