C#面向对象
1·类的定义:由具体到抽象的过程
- 关键字:class
- 访问修饰符 可以修饰类也可以修饰成员函数和属性
- public:公共的,任何类可以访问
- private:私有的,只能在当前类访问
- internal:默认,内部的,当前项目内访问
- 构造函数:类实例初始化类成员的过程,默认含有一个空无参构造函数(不显示),自定义构造函数后默认构造函数失效
2·创建对象
- 关键字:new
- 调用构造函数:ClassName a =new ClassName()
- 成员变量:例
- 字段:public int a;
- 属性:public int b{get;set;}
- 属性是对字段的封装
- 成员方法
3·面向对象三大特性
-
封装
- 字段封装成属性,通过get/set方法获取/设置
- 将方法的多个参数封装到一个类中
- 将方法、字段、属性封装到一个类中
- 将具有相同功能的类封装到程序集中
- ++方法重载++:方法名相同,参数列表(方法体可以相同也可以不同)的方法,调用时通过参数列表识别对应方法
-
继承
- A:B:A继承自B,A为子类/派生类,B为父类/基类
- 所有类都继承自Object类
- 关键字this:表示当前类的某个实例,可直接访问类成员,例:this.a
- 关键字base:表示当前类的父类的某个实例,可直接访问父类成员
- 更好的实现代码重用
- 单继承:一个类只能继承自一个类
- 继承后的构造方法调用:
- 原理:
- 内存中创建一个父类对象
- 外部加上子类成员
- 合并成为一个子类对象
- 过程
- 默认先调用父类无参构造方法(被继承时一定要有一个无参构造方法)
- 然后根据参数列表选择子类构造方法
- 子类构造方法:base(参数列表):指定父类中特定构造方法
- 原理:
- 派生类的访问权限<=基类访问权限
- 派生类实例继承父类所有成员,可以加以修改/重写
- 父类private成员也会被继承,父类私有属性可以通过getter/setter访问,父类私有方法无法访问
-
多态
- 父类型的变量可以指向子类型的对象
Animal dog=new Dog();
- 对象可以完成向上类型转换
- 运算符is:类型判断,返回bool
Animal a=new Animal();
bool b=a is Dog;
- 运算符as:类型转换,失败返回null
Animal a=new Animal();
Dog d=a as Dog;
-
方法重写:
- 父类中使用virtual修饰方法
例:public virtual int function(){}
- 子类中使用override修饰方法
例:public override int function(){}
- 无论变量类型,只需要确定变量的对象,指向子类对象时,调用的方法是子类中定义的方法,而非父类中定义的方法(继承的方法也是子类方法)
-
声明变量的类型决定了变量访问成员的范围