IS & AS
obj is Employee
obj as Employee
checked & unchecked
checked((byte)(b+200))
checked
{
byte b = 100;
b = (byte) (b + 200);
SomeMethod(400); // 在checked操作符或语句内调用一个方法并不会对该方法产生任何影响
}
checked
{
byte b = 100;
b = (byte) (b + 200);
SomeMethod(400); // 在checked操作符或语句内调用一个方法并不会对该方法产生任何影响
}
值类型与引用类型
Equal,GetHashCode,拷贝
重写Equal方法的同时必须重写GetHashCode方法,因为Hashtable要求相等的两个对象拥有相同的HashCode;
Obj.MemberwiseClone()是浅拷贝;
有参属性(索引):
public bool this[int index]
{
get{}
set{}
}
{
get{}
set{}
}
Char
有三种技巧允许我们进行Char和数值之间的转化:
代码
//直接转化,性能最好
Char c = (Char)65;
int i = (int)c;
//Convert
Char c = Convert.ToChar(65);
int i = Convert.ToInt(c);
//IConvertable
Char c = ((IConvertable)65).ToChar(null);
int i = ((IConvertable)c).ToInt(null);
Char c = (Char)65;
int i = (int)c;
//Convert
Char c = Convert.ToChar(65);
int i = Convert.ToInt(c);
//IConvertable
Char c = ((IConvertable)65).ToChar(null);
int i = ((IConvertable)c).ToInt(null);
String内存驻留, Intern, IsInterned
内存驻留:CLR在编译时会为代码中的所有字符串生成一个散列表,Key为字符串,Value为字符串在堆中的引用。
string.Intern(str) 是把某个str加入到散列表中;
string.IsInterned(str) 如果str存在于散列表中,返回str的引用,否则返回null。
委托链
Delegate d = new Delegate(M1);
d +=new Delegate(M2);
M2的Delegate会添加到Delegate d的头部,组成一个委托链;委托链中的每个 delegate调用的时候如果它前面还有其他委托,会被提前调用;
垃圾回收:
代龄
根对象,找到所有可达对象,对不可达对象进行回收,压缩management heap
代龄
根对象,找到所有可达对象,对不可达对象进行回收,压缩management heap