1、结构,值类型,不支持继承,有构造函数(必须带参数,并且给所有成员赋值),
有时只需要一个小的数据结构,此时类提供的功能多于我们需要的功能,由于性能原因,最好使用结构
结构还可以包含构造函数、常量、字段、方法、属性、索引器、运算符、事件和嵌套类型,但如果同时需要上述几种成员,则应当考虑改为使用类作为类型。
结构可以实现接口,但它们无法继承另一个结构。 因此,结构成员无法声明为 protected。
2、int MoveAndResize(int x, int y, int t = 0, int h = 0) => x + y + t + h;//表达式体方法
3、MoveAndResize(x: 1, y: 2);//命名的参数,明确参数的的含义(必填参数要加必须都加)
MoveAndResize(1, 2, h: 2);//指定可选参数
4、int Sum(params int[] args) => args.Sum();//个数可变的参数
5、静态构造函数,只运行一次,在代码引用类之前调用它(在C#中通常在第一次调用类的任何成员之前执行静态构造函数)
。net运行库没有确保什么时候执行静态构造函数,所以 不应把要求在某个特定时刻(例如,加载程序集时)执行的代码放在静态构造函数中,也不能预计不同的类的静态构造函数按照什么顺序执行。
如果多个类都有静态构造函数,先执行哪个静态构造函数就不确定,此时静态构造函数中的代码不应该依赖于其他静态构造函数的执行情况
先执行子类的静态构造函数,再执行父类的静态构造函数
6、在加载类时执行静态构造函数,在创建类的实例时执行实例构造函数
7、用static声明的变量或函数,都是属于类的,而不属于类对象,
在静态构造函数初始化之前初始化了。如果没有静态构造函数,在在类第一次被用到时,初始化static变量.
c#默认会给static变量初化得,比如staitc整型变量,会初始化为0。
如果在类的构造函数中初始化static变量,那只有在你new过该类的对象后,static变量的初始化才起作用。
8、类成员 实例成员
9、Person p = new p2();//父类实例化成子类
10、int? x1=null; 可以通过x1.HasValue 来判断是否为null
11、枚举,值类型
Color c = Color.Red;//默认的情况下enum的类型是int,命名常亮的值从0开始递增
12、partial关键字,允许把类、结构、方法或接口放在多个文件中
13、所有。net类都派生自System.Object.
对于结构,这个派生是间接的,结构总是派生自System.ValueType,System.ValueType派生自System.Object
14、在没有初始化类成员时,编译器会自动把引用类型初始化为null,值类型初始化为0,布尔类型初始化为false
15、基类Object