c#中快捷键:
ctrl+k+d:可以使代码对齐
ctrl+k+c:可以注释代码
面向对象的三大特征:封装,继承,多态
1.封装
访问修饰符:(1)public (2)private (3)internal (4)protected
2.继承
(1)字段的继承
(2)方法的继承
上图中son类继承father类,如果要是子类对象调用父类方法时,则父类构造方法前需要加上public修饰符,否则就会报错。
(3)关键字this和base:this和base关键字,不能用于静态方法中
this表示当前类的,base表示继承类中的
(4)方法覆盖,在子类中有与父类同名的方法,调用时先调用子类中的方法。
(5)子类与父类的构造函数之间的参数传递
程序执行过程中,先执行父类的构造函数,再执行子类的构造函数。
如果无参构造子类对象时,首先会进行子类的无参构造函数,之后进行父类的无参构造函数。
如果带参构造子类对象时,首先进行子类的带参构造函数创建子类对象,之后会将参数传递到父类带参构造函数中执行父类的带参构造函数。
3.命名空间(namespace) 文件夹
在一个项目中,不同文件夹下可以放相同的程序
实例化时需要注意加上文件夹的名字或者在命名空间上加上using MySecondProject。
4.如果需要项目跨程序集来运行需要注意以下几点
(1)如果Internal_A中需要访问Internal_B中的方法,需要在Internal_A的依赖项中添加项目引用
(2)需要将类名和方法名全的访问修饰符都改成public
5.属性:
属性的作用:(1)实现对字段封装的一个手段,主要实现对字段的读和写的控制。
(2)实现对字段数值的范围控制
如果字段是私有类型(private),往往定义字段都是以下划线开头(eg:_intAge)
快捷生成属性方法:单击字段,右击快速操作和重构,选择封装字段并使用属性。
6.面向对象 多态
(1)方法重载:类中,方法的名称相同,但是方法的参数个数或者参数的数据类型(返回值类型)不相同的的这种方式称为面向对象的“方法重载”。
(2)构造函数重载:是方法重载的一个特殊例子
(3)方法重写:
方法重写与方法覆盖的区别:方法重写,基类中的方法使用virtual修饰,子类中的方法用override来修饰
方法重写的作用:把基类的写的不成熟的方法,在子类中进行重写,来完善方法,而方法覆盖是无意而为之的。
(4)密封
密封类,不能够继承,不能够存在虚方法,密封类中的方法就是密封方法
密封方法 要求:(1)密封方法,必须是在子类方法中对基类虚方法的重写进行密封
(2)密封方法,sealed必须和override一起出现
不能对密封方法进行重写,只能对其进行覆盖
(5)抽象
对类或者方法,用abstract进行修饰,使之变成“抽象类”或“抽象方法”
定义抽象方法时,必须在abstract前面或后面加上public否则就会报错,因为默认情况下是私有的
规则:
1》抽象类的子类,必须实现抽象父类中的所有抽象方法
2》抽象类不能实例化
3》抽象方法没有方法体
4》抽象类不能是密封或者是静态的
5》子类使用override来实现抽象方法
6》抽象方法一定在抽象类中,但是抽象类中不一定要包含抽象方法
7》抽象的方法不能是私有的,而且抽象方法机器重写方法的访问限制应当相同
8》抽象方法不能使用virtual来修饰,区分“虚方法”与“抽象方法”。虚方法中有方法体,而抽象方法中没有方法体。
(6)接口
规则:
1》接口中定义是方法,并且方法没有方法体
2》接口中没有字段,只有不包含方法体的方法的罗列
3》接口的继承类。需要实现接口中的所有方法
(7)多态性
虚方法:父类中定义一个虚方法,用virtual修饰,子类覆盖父类中的方法,override。
抽象方法:父类中定义一个抽象方法,用abstract修饰,子类中用override重写抽象方法。
接口:定义一个接口,在子类中实现接口中的方法
面向对象多态性的具体的使用方法
1》声明父类,new子类,可以实现动态多态性。降低类之间的耦合性(高内聚,低耦合)
2》功能定义与功能实现相分离,做到了模块化
3》能用接口,就不用抽象类(抽象方法);能用抽象,就不用虚方法