C#OOP课程总结
一.第1章~第4章 1.0 属性
C#属性可以利用get取得字段的值,set可以设置字段的值,在访问器中可以对数据进行约束
1.1值类型和引用类型
1.值类型——System.ValueType
将一个值类型变量赋值给另一个值类型变量时,将赋值包含的值
2.引用类型——System.Object 存储的是对值的引用
只赋值对象的引用,而不赋值对象本身(像气球:只加线不加气球的个数) 值类型 基本数据类型 枚举类型 结构类型 Int long float char bool enum Struct(需要存较少属性时可用) 类 接口 数组 引用类型 System.Object string class interface Int[] , string[] 1.2集合操作
集合 —— ArryList Hashtable(哈希表)
(泛型集合) List
泛型优点——1. 性能高 2. 类型安全 3. 实现代码的重用 4. CLR支持泛型 泛型集合:
可以约束它所存储的对象的类型 无需类型转换 必须实例化
1.3类、对象
区别:类定义了一组概念的模型,对象是真实的实体
关系:
1. 有对象归纳为类,是归纳对象共性的特征
2. 在类的基础上,将状态和行为实例化为对象的过程称为实例化 类的属性:
只读属性 get { return 字段名;} 只写属性 set { 字段名= value;}
读写属性 字段名{ get ; set ; } ——快捷键 ( prop )
1.4构造函数
特点:
1. 方法名和类名相同
2. 没有返回类型(注意:void的返回类型为空,不代表没有返回类型) 3. 完成对象的初始化工作 包括:
无参构造函数
public Employee () { } 带参构造函数
public Employee (string id, string name, int age)
{
this.ID = id; this.Name = name; this.Age = age; }
隐式构造函数
当不给类编写构造函数时,系统将自动给类分配一个无参的构造函数,叫做隐士构造函数。一旦类有了构造函数,就不再自动分配构造函数。 子类构造函数
1. 隐式调用父类构造函数:
? 子类中没指名调用父类中的哪一个,父类中必须有一个无参的构造函数,如果指名父类
中有参的,父类中可有无参构造函数
? 在创建子类对象时,子类一定会调用父类的构造函数
2. 显式调用父类构造函数:
public SE (string id, string name, int age, int popularity) : base(id , name, age )
{
this. Popularity = popularity ; }
1.5方法重载
定义:
多个构造函数提供了多种实例化一个类的方式,称为 方法重载 。
(构造函数的重载是方法重载的一种特殊方式) 特点:
1. 方法名称相同
2. 参数的类型不一样,个数,顺序不一致 3. 在同一个类中 优点:
1. 避免命名的麻烦
2. 调用者不必再对参数类型做判断而直接调用 作用:
为了初始化属性,与New一起使用 注意:
仅仅名字相同,但返回类型不同的方法不是重载方法,不能存在于同一个类中
1.6静态方法
特点:
为一个类的所有实体所共享 语法: class 类名 {
public static 数据类型 变量名; (eg: public static string country = ”China” ; ) public static 返回值 方法名 ( 参数列表 )
{
//方法体;
} }
调用:
类名.变量名; //访问静态变量 类名.方法名; //调用静态方法 静态成员:
适用于一些不会经常变化而又操作频繁的数据(如:数据库的连接,网络的一些配置) 静态方法若直接调用某个方法,那方法只能是静态的
? 静态方法和变量属于类本身,使用时不用声明类的实例 ? 实例方法和变量属于类的实例,使用时必须创建类的实例 区别 分类 static 调用 静态成员 直接访问实例成员 直接调用实例方法 初始化 静态方法 需要 类名 可以直接访问 不可以 不能 调用前 实例方法 不需要 实例对象 可以直接访问 可以 可以 ~ 静态方法 实例化对象时
1.7对象交互(ACCP6.0)
原理:
对象之间通过属性和方法进行交互,也可认为方法的参数以及方法的返回值都是对象之间相互传递的消息。 示例:
顾客点餐 遥控器
二.第6章~第8章
2.1面向对象特性:封装 、继承、多态
封装:
1. 定义:保证对象自身数据的完整性和安全性 2. 语法:
Private string _name; Public string Name {
get {return _name;} set {_name = value ;} } 3. 优点:
? 保证数据的安全性 ? 提供清晰的对外接口
? 类内部实现可以任意修改,不影响其他类
继承:
1. 定义:符合 is-a 的关系
2. 作用:建立类之间的关系,实现代码复用,方便系统的扩展 3. 包括:
父类(基类)——被继承的类
子类(派生类)——继承其他类的类 4. 语法:
class PM : Employee , class SE : Employee (子类PM,SE继承了父类Employee ) 5. 特性:
传递性:eg: 卡车继承汽车,微型卡车继承卡车 单根性:一个类只能有一个父类 6. 特点:
? 模拟了现实世界的关系 ? 实现了代码的重用
? 使程序结构清晰
7. C#关键字:
? this 表示当前实例
? base 用于表示父类,可以用于访问父类的成员
(在子类中可以使用base调用父类的属性)
? protected 允许被其子类访问,而不允许其他非子类访问 ? sealed 密封类 不能被继承的类 ( eg: string类 ) 8.private < protected < public 三种修饰符的区别: 修饰符 public protected private 类内部 可以 可以 可以 子类 可以 可以 不可以 其他类 可以 不可以 不可以 多态:
1.定义: 相同的方法调用可实现不同的实现方式
2.解决继承的什么问题?
父类的子类很多,方法各不相同,需要用很多的if 判断句 3. 方法的重载也成为方法的多态 4. 如何实现多态: 虚方法 抽象方法
2.2虚方法
1. 实现多态的步骤:
? 实现方法的重写。—— 父类中定义方法,用virtual 关键字定义虚方法 ? 在子类中定义子类自己的方法,用override 实现了对父类的重写 (两种方式实现子类重写父类)
? 创建父类变量,用子类对象实例化这个父类变量
? 把父类类型作为参数类型,它的子类对象作为参数传入 ? 定义父类变量,用子类对象初始化父类变量 2. 示例:(计算器) 3. 虚方法和抽象方法的区别: