1、构造函数
定义一个类时,C#默认会实现一个隐式的构造函数,默认的构造函数不接受参数,负责把新对象分配到内存中并确保所有字段数据都设置为正确的默认值。然而,一旦自定义了构造函数,默认构造函数就被自动从类中移除不再有效!
如果希望继续使用自定的构造函数,也需要有默认构造函数为字段创建默认值,则需要显式的重新定义默认构造函数!绝大多数情况下默认构造函数的实现是故意为空。
2、this关键字
this关键字提供对当前类实例的访问。静态成员不能使用this,因为不是实例。
3、静态
静态数据字段:
对所有对象的实例共享。
静态构造函数:
静态构造函数是特殊的构造函数,非常适合于编译时静态数据初始化值未知的情况。
注:1个类只能定义一个静态构造函数。(不可以重载)
静态构造函数不允许使用访问修饰符(public等)且不接受任何参数
无论创建多少对象,其静态构造函数只执行一次。
静态构造函数的执行优先于任何实例级别的构造函数。
静态类:(只包含静态功能的类或结构通常被称为工具类)
静态类不能实例化。
静态类只能包含静态的成员和字段。
防止类被实例化的方法:
- 构造方法私有 即使用private声明
- 将类定义为抽象类
- 静态类(更安全、更简洁)
4、面向对象的三个支柱:封装、继承、多态
封装的作用!
代码重用:
继承:is-a的关系!
包含/委托:has-a的关系(或称聚合)!
例:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class Radio 2 { 3 public void power(bool turnon) 4 { 5 Console.WriteLine("Radio is {0}",turnon); 6 } 7 } 8 9 class Car 10 { 11 //汽车has-a收音机 12 private Radio myRadio = new Radio(); 13 public void TurnOnRadio(bool onOff) 14 { 15 myRadio.power(onOff); 16 } 17 }
5、非嵌套类型不能标记为私有
6、自动属性
7、对象初始化语法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 // 手动设置每个属性 2 Point firstPoint = new Point(); 3 firstPoint.X = 10; 4 firstPoint.Y = 10; 5 firstPoint.DisplayStats(); 6 7 // 或通过自定义构造函数创建对象. 8 Point anotherPoint = new Point(20, 20); 9 anotherPoint.DisplayStats(); 10 11 // 或使用对象初始化语法创建对象. 12 Point finalPoint = new Point { X = 30, Y = 30 }; 13 finalPoint.DisplayStats(); 14 15 // 创建并初始化矩形 16 Rectangle myRect = new Rectangle 17 { 18 TopLeft = new Point { X = 10, Y = 10 }, 19 BottomRight = new Point { X = 200, Y = 200 } 20 };
8、常量(const)与只读字段(readonly)
常量在运行前确定,定义一个常量时即为其赋值,赋值后不能则进行修改。常量是隐式静态的,使用类名前缀使用常量。
只读字段可在运行时确定,但必须在构造函数之中,否则报错。只读字段默认不是静态的。
静态只读字段。运行前确认值的只读字段与常量相似。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class MyMathClass 2 { 3 public static readonly double PI; 4 static MyMathClass() 5 { PI = 3.14; } 6 }