面向对象(Object Oriented,OO)
- 面向对象(Object Oriented,OO)
- 面向对象(Object Oriented,OO)是当前计算机界关心的重点 它是90年代软件开发方法的主流 面向对象的概念和应用已超越了程序设计和软件开发 扩展到很宽的范围(如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域)
- 面向对象概念
- 面向对象不是取代面向过程的
- 面向对象的三个特性: 封装 & 继承 & 多态
- 类/对象
- 字段/属性/方法
- 类的继承
- 没有面向对象的世界中的难题
- 成员访问级别
- 字段/方法/属性都是类的成员 都需要定义访问级别/访问级别的用处在于控制成员在哪些地方可以被访问 这样达到面向对象”封装”的目的
- public/private/protect/internal
- public任何地方均可访问 private是默认访问级别 只有本类成员可访问
- 永远不要把字段public
- 定义类
- 类就是把一系列相关变量/状态/行为定义为一个整体
- class Person{}
- 属性
- 与字段比较 属性可以进行非法值控制 可以设置只读
- 惯用法: 属性开头字母大写/字段开头字母小写
- 只用get或只用set就可以定义只读或只写属性
- get set可以设置访问级别
- 简化语法: public int Age{get;set;}
- .Net Reflector(6免费版)
- 对象的引用
- 值类型(内存堆)/引用类型(栈)
- 拷贝赋值的为值类型(int datetime bool char) /引用类型赋值时传递的是引用
- 构造函数
- 用于创建对象的特殊函数
- 函数名与类名相同/无返回值/无void/可以有参数
- 构造函数可以重载
- 如果不指定构造函数则类有一个默认的无参构造函数/如果指定了构造函数则不再有默认无参构造函数 如果需要无参构造函数则需自己写
- 继承
- class Chinish : Person
- 定义时不指定父类则父类为Object(所有类的基类)
- Object指针指向什么对象均可
- 异常与异常处理
- 异常机制
- 传统的错误表示方式: 错误码
- 错误码缺点: 不处理则很难发现 每次处理则很麻烦/难以看出错误的原因
- try catch
- Exception类主要属性: Message & StackTrace
- Exception类构造函数
- 异常发生后程序默认退出 后续代码不会被执行/catch后代码则会继续执行
- 不要吃掉异常/一般情况下不需要处理异常
- 抛出自己的异常
- 常量与静态类&成员
- (面向过程)const常量(一定不会变化的值/常量名大写/public const不用new可以直接调用)
- 静态类: 无法实例化/一般用于实现纯函数库
- 静态成员(方法/字段/属性):不用new即可调/static变量当作全局变量
- static方法中可以调用其他static方法/字段/属性但不能调用非static方法/字段/属性 非static方法中可以调用static方法/字段/属性
- 命名空间
- namespace/命名空间: 用于解决类重名问题/可以看做类的文件夹
- 调用类: using+namespace / System.Collections.ArrayList类快速引入 右键→解析
- 不同namespace下需添加using引用/可修改类默认namespace/相同文件下不一定不用using 不同文件夹下不一定非用using
- (特殊函数)索引器
- C#中提供了按照索引器进行访问的方法(如 数组)
- 索引器定义方式: string this[int index]{get{return “”;}set{}}; //string为索引器类型 []中是参数列表 执行set代码块是进行索引器写操作 执行get代码块是进行索引器读操作
- 索引器参数可以不止一个 类型也不限于int 几乎可以是任意类型 可以只有get没有set(只读)
- 事件 & 委托
- Windows事件驱动机制:
- 委托机制:
- RunCircus(new AnimalPlay(CatPlay),”Kitty”);
- &
- .Net通过委托机制把系统和应用程序中的事件处理程序联系起来了/委托-”函数类型”/委托和事件→对象和类/.Net中预定义多种专用委托类(EventHandler KeyEventHandler MouseEventHandler等)
- &
- 点按钮时this.label2.Click+=new System.EventHandler(this.label2_Click);
- 多余事件代码删除: 属性→事件 先删除/保存/代码处再删除
{
private int temperature = 0;
public delegate void BoilHandler(int param); //声明委托
public event BoilHandler BoilEvent; //声明事件
public void BoilWater()
{
fpr(int i=1; I <= 100; i++)
{
temperature++;
if (temperature>=99 && BoilEvent != nill)
{
BoilEvent(temperature); //调用所有注册的方法
}
}
}
}