C#中可以为一个类定义运算符
public List<A> operator + (A a1, A a2){ List<A> aList = new List<A>; A.add(a1); A.add(a2); }
Priority

初始化器
int[] arr = new int[] {1, 2, 3};
typeof(T): 获得某个类型的Type信息default(T): 获得某个类型的默认值(把内存全刷0)因为值类型变量默认没有初值,所以可以赋一个default值给它
注意
enum类型的问题:如果对应enum 没有为0的值,那么default(T) 直接报错匿名类
var person = new { id = 1, name = "ayapa" }; //person.id, person.name
checked / unchecked 用于检查变量是否存在内存溢出的问题,如果有则抛出OverflowException 可以用
uint y = checked(x + 1) 来对单个变量进行检查,也可以直接当作上下文修饰符:checked{ try{ uint y = x + 1; }catch(OverflowException ex){ Console.WriteLine("Overflow hassei."); } }
sizeof() 如果要看类变量和struct变量占用的空间,则需加以unsafe 上下文Convert.To...() 和 <vartype>.Parse()可以显示转换数据,但在类型无法转换时会抛出FormatException ,在丢失精度的转换中会抛出OverflowException bool <vartype>.TryParse() 接收俩参数,第一个是待转换参数,第二个是一个输出参数,存储转换结果若发生溢出或者不可转的情况,则函数返回false,输出参数设为0;反之返回true
自定义类型转换操作符
在类中定义一个
public static explicit / implicit operator <CastToClassName>() 方法,可以自定义类型转换符,后者是隐式转换(若没定义explicit,此时显式转换会自动走隐式转换的方法)class Monkey { public int age; } class Stone { public int age; public static explicit operator Monkey(Stone stone) { Monkey monkey = new(){ age = stone.age - 500 }; return monkey; } }
Monkey monkey = (Monkey)stone; Console.WriteLine(monkey.age); // if implicit // cannot be explicit, or u will have a compiling error Monkey monkey = stone;
varName is typeName:判断变量是不是某种类型 或 某种的数据,返回bool 为
null的值一定会判定为false ,子类对象可以判定为父类varName is typeName :先检查变量能不能转换成对应类型,能就返回(T)varName 反之返回null