1、一旦定义了自定义构造函数,默认的构造函数就会被移除 2、可以使用this设计构造函数链,将核心部分代码由主构造函数完成,其余的构造函数调用主构造函数就可以了 3、静态构造函数适合初始化静态数据成员(这个初始化发生在编译时) 4、防止创建类对象的方式:
- 定义静态类
- 将构造函数声明为私有的(private)
- 将类声明为抽象的(abstract)
5、OOP支柱 封装:
- 支持类型属性(可添加访问控制符),用来get和set数据成员(这里的get和set在内部也是方法,
所以其前面也可以添加访问控制符),也可以只写get或者set。
- 对于静态数据成员,可以有静态的类型属性来get和set(当然也可以用非静态属性)。
静态数据的初始化最好在静态构造函数中进行。
- 常量(const)必须在声明时被初始化。
- 只读(readonly)数据成员可以在构造函数里初始化,但是不能在对象构造完后初始化。
- 静态只读(staticreadonly)数据成员可以在声明时初始化,也可以在静态构造函数里初始化,
也可以在非静态构造函数里初始化(不建议,效率很低)。
- 支持partial关键字,表明类可以写在多个文件中。
继承:
- 不支持多重继承,但可以实现许多独立的接口
- sealed关键字防止派生,一个类被声明为sealed时不可派生
- base关键字访问父类中的public和protected成员
- 包含/委托模型,即将一个类对象封装在另一个类里,
在另一个类里定义方法访问这个类对象所能访问的成员。同时也可以定义属性来公开这个类对象
- 嵌套类:通常内部类是为包含类做辅助的,一般为private,但是外部类不能声明为private。
内部类可以访问外部类的私有成员 多态:
- virtual关键字使基类的方法可以被子类重写(override)
- override关键字使子类重写基类virtual方法的实现
- 当虚方法被声明为sealed时(例如:publicoverridesealed Show()),
这个虚方法不能再被它的直接子类重写
- 抽象类一般定义抽象方法作为接口,使子类必须重写此抽象方法。从而实现多态。
- 投影的概念:当子类和父类具有同样的方法时(子类不override父类的方法),
子类可以为此方法添加new关键字从而隐藏父类的相同方法。如果想调用父类的相同方法时, 可以强制转化子类为父类,这样就可以使用了。
- as关键字:用来判断两个对象是否相容(也就是说可以把子类看成父类,不能把父类看成子类)
- is关键字:判断某个对象是哪个子类
6、访问修饰符 private:只能类内部成员方法使用,外部定义的对象不可访问 protected:只有该类和其派生类的内部成员方法可以使用,外部定义的对象不可访问 public:(不说了) 注:C#语言默认的访问控制符是private