1 、public ,对访问成员无限制,属于访问级别最高的权限。
protected 访问包含类或者丛类派生类的类。
internal 仅限于程序集,
protected inernal 访问仅限于从包含类中派生的当前程序集或类型。
private 仅限于范文包含的类型。
2、 多态分为四种:强制,重载,参数,包含。
3、c#通过abstract和virtual来实现 抽象方法和虚方法,以便在子类中复写父类的方法。
4、在.NET中多以able为接口的命名后缀,例如:INullable,ICloneable等,以I为前缀标示。
5、.NET中通过接口实现多继承,例如: public struct DateTime : IComparable,IFormattable,Iconvertiable等。
6、接口的本质可以被视作是:定义了抽象方法的类。仅提供了方法,具体的方法功能由实现类来完成。
7、Iserializable序列化,序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
8、面向接口编程,单一小功能接口,接口并不能被实例化,没有构造函数,接口的成员被隐式声明为public。
9、继承是类与类之间的关系。实现继承:.NET中system.object是所有类型的基类。接口继承:派生类继承了接口的方法签名。
10、继承是可传递的,子类是对父类的扩展,必须继承父类的方法,同时可以添加新的方法。
子类可以调用父类的方法和属性,父类不可以调用子类的方法和属性。
虚方法如何实现覆写操作,是的父类的指针可以指向子类的对象成员。
子类不光继承父类的公有成员,同时也继承了父类的私有成员,只是在子类中不可以访问而已。
11、密封类不可以被继承,继承关系中,需要多加注意共有的特性,即共性。
12、封装隐藏了类的内部实现细节。对外通过接口访问。封装是一个包装,分为内外两个空间,对内实现数据私有,对外实现方法调用,保证了数据的完整性和安全性。
13、软件系统问题:僵化,牵一发而动全身,无法修改扩展。复杂和重复,难以理解,不可复用,不够稳定。
14、设计模式,构建灵活可靠的系统。Proxy模式,单一原则:一个类,最好只做一件事,只有一个引起它变化的原因。
15、软件实体对扩展是开放的,对修改是封闭的。
16、依赖倒置原则,不要调用我们,我们会调用你。体现在:高层模块不应该依赖底层模块,二者依赖于抽象,抽象不应该依赖于具体,具体应该依赖于抽象。
17、 对接口进行编程,不要对实现进行编程。
18、接口隔离原则:使用多个小的专门的接口,不要使用大的接口。接口应该是内聚的,要避免“胖”接口。一个类对应另一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法,这是一种接口污染。
19、分离接口手段:委托分离(增加系统负担),多重继承分离。对相近的接口进行合并,会造成接口污染,实现内聚的接口才是接口设计的基本原则。
20、liskov替换原则:是关于继承机制的应用原则。核心思想是:子类必须能够替换其基类。
21、
设计的分寸:
设计原则:面向对象,面向过程,面向服务,框架,设计原则,设计模式,模式之外。
依赖,抽象:依赖就是关系,代表了实体之间的联系,依赖可以分为:无依赖,单向依赖,双向依赖。耦合:零耦合,具体耦合,抽象耦合。
耦合如何产生:继承,聚合,接口,方法调用和引用,服务调用。
设计的目标是高内聚,低耦合。铭记:面向抽象编程,低耦合,高内聚,封装变化,实现重用:代码重用,算法重用。
尽可能的实现:单向依赖,不需要进行数据交换的数据双方,不进行多余的关联。
保持内部的封装性。
高层模块不应该依赖于低层模块,应该依赖于抽象。
抽象不应该依赖于具体,细节应该依赖于抽象。
依赖倒置的核心:依赖于抽象,对接口编程,对抽象编程。
依赖倒置的要求:少继承,多聚合,单向依赖,封装抽象,对依赖关系都应该终止于抽象类和接口。
依赖倒置的两个弊端:对抽象编程,增加了系统的负责度和维护成本。
具体类不存在的时候,不需要遵守依赖倒置。
依赖注入:接口注入,构造器注入,属性注入,