C#面向对象基础课件.ppt_第1页
C#面向对象基础课件.ppt_第2页
C#面向对象基础课件.ppt_第3页
C#面向对象基础课件.ppt_第4页
C#面向对象基础课件.ppt_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、北京传智播客教育 ,C#面向对象基础,讲师:杨中科,面向对象概念 OOP,面向对象不是取代面向过程的。 类、对象。“人”是类,“张三”是“人”这个类的对象。类是抽象的,对象是具体的。按钮就是类,某个按钮就是对象。对象可以叫做类的实例。类就像int,对象就像10。字段(和类相关的变量),字段就是类的状态。人这个类有姓名、年龄、身高等字段。类不占内存,对象才占内存。 方法,方法就是类能够执行的动作,比如问好、吃饭等。 类的继承,类之间可以有继承关系,比如“电脑”类可以从“电器”类继承,这样的好处是“电脑”类只需要定义自己特有的字段、方法就可以,也就是只要定义内存大小、CPU型号这些字段或者弹出光驱

2、等方法就可以。父类、基类。电脑类是电器类的子类。重用。 面向对象的三个特性:封装、继承、多态。 没有面向对象的世界中的难题。,定义类,class Person ,定义方法(类的函数): class Person public void SayHello() Console.WriteLine(你好,我是0,Name); 初始化对象,调用方法: Person tom = new Person(); tom.SayHello(); 对象必须调用构造函数初始化“new Person()”后才能用,不能Person tom这样声明;就调用。,定义字段: class Person public stri

3、ng Name; public int Age; public void SayHello() Console.WriteLine(你好,我是0,Name); 初始化对象,调用方法: Person tom = new Person(); tom.Name=tom; tom.SayHello(); Console.WiteLine(0,tome.Name),一个类可有有多个实例。 类就是把一系列相关的变量(状态)、行为定义为一个整体。,课上练习,聊天机器人 练习要求:自己把我的程序重新写出来,性别的时候说中文,对异常情况(错误的喂饭数字,喂的太多撑死了),一开始通过1、2数字选择多个聊天机器人。

4、,成员访问级别,字段、方法、属性(后面讲)都可以叫做类的成员,他们都需要定义访问级别。访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对象中“封装”的目的。 几个访问级别:public(任何地方都可以访问);private(默认级别。只能由本类中的成员访问)。还有internal、protected两个级别,以后会讲。,class Person private string Name; public void GiveName(string name) Name = name;/拒绝不好听的名字 public void SayHello() Console.WriteLine(你好

5、,我是0,Name); ,Person tom = new Person(); tom.GiveName(tom); /tom.Name=tom; tom.SayHello();,永远不要把字段public,属性,惯用法:属性开头字母大写,字段开头字母小写,class Person private int age; public int Age getreturn age; setage=value; public void SayHello() Console.WriteLine(我的年龄是0,Age); ,只用set或者只用get就可以定义只读或者只写属性(只写的不常见)例子 可以为set

6、、get设置访问级别 例子,限制非法值的设置 (.Net3.x)简化set、get:public int Ageget;set;。适合于set、get中没有特殊逻辑代码的情况。 看似字段、不是字段,可以进行非法值检验。,构造函数,默认构造函数 重载构造函数 /重载构造函数之间互相调用,继承,public class Chinese:Person public string HuKouget;set; public void KongFu(). Chinese p1 = new Chinese(); p1.Name=李雷; p1.HuKou=北京市朝阳区; p1.SayHello(); p1.K

7、ongFu();,定义类的时候不指定父类,则是Object类。Object类是任何类的直接或者间接父类。(不严谨),虚方法 public class Person public virtual void SayHello() Console.WriteLine(我的年龄是0,Age); public class Chinese : Person public string HuKou get; set; public override void SayHello() Console.WriteLine(小生虚度光阴0载, Age); Korean类。 Chinese p1 = new Chin

8、ese(); p1.SayHello();,案例,覆盖Object类的ToString方法来自定义显示的字符串。 在子类方法中调用父类的方法base.SayHello(); 子类中的构造函数;,多态(*理解),Person p = new Korean(); p.SayHello(); Object obj = new Chinese(); string s = obj.ToString(); obj = p; s = obj.ToString();,隐藏父类方法(尽量避免,不推荐这么做) public class Chinese : Person public string HuKou ge

9、t; set; public void SayHello() Console.WriteLine(小生虚度光阴0载, Age); Chinese p1 = new Chinese(); p1.SayHello(); Person p2 = new Chinese(); p2.SayHello();,多态的好处(*理解),public Person GiveMeAPerson() return new Chinese(); Person p = GiveMeAPerson(); p.SayHello();,模板方法模式,数据库执行权限检查,对象的引用,i1=3;i2=i1;i1+;与p1=new

10、 Person();p2=p1;p1.i+; int、string、decimal、bool、byte等基础类型是传递拷贝;对象则是传递引用。因为基础类型不怎么占内存,而对象则比较占内存。 函数间传递对象。 为对象变量重新赋值,对象的隐式转换和显式转换,/隐式转换,把子类变量赋值给父类变量 Chinese ch= new Chinese(); Person p = ch; /显式转换,把父类变量赋值给子类变量 Person p = new Chinese(); Chinese ch = (Chinese)p; /如果对象不在同一个继承树路径上 /则不能强制类型转换 Dog g = new Do

11、g(); Chinese ch = (Dog)g;/错误 /is运算 if(p is Chinese) Console.WriteLine(中国人); else if(p is Korean) Console.WriteLine(韩国人); ,/as 运算符 Chinese ch = p as Chinese ; if(ch!=null) Console.WriteLine(中国人); Korean ch = p as Korean ; if(ch!=null) Console.WriteLine(韩国人); /可以解决强制类型转换的不在继承树路径上的问题。C#中不可以 Dog g = new

12、 Dog(); Chinese ch = g as Chinese ; 协变和逆变,抽象类、接口,public abstract class Person public abstract void SayHello(); 一旦类中定义了一个抽象方法,那么这个类必须声明为抽象类 抽象类不能用new初始化实例。abstract 方法不能定义方法体。,public interface Flyable void Flay(); Walkable 接口方法不要public。,1、一个类只能继承自一个类,但是可以实现多个接口 2、一个抽象类中可以定义实现代码,但是接口不能定义实现代码。 3、接口的多态特性

13、、类型转换、is、as 和类基本一样。举例,异常与异常处理,传统的错误表示方式:错误码。举例。 错误码的缺点:不处理则很难发现,每次处理则很麻烦;难以看出错误的原因;容易使得程序进入不确定状态。 try catch。Exception ex 异常也是对象。 Exception 类主要属性:Message、StackTrace 发生异常后程序默认就退出了,后续代码不会被执行。catch以后的代码则会继续执行。 不要吃掉异常 扔出自己的异常,常量与静态成员,const常量。常量名要大写。 全局变量。static类变量。 不用new就能用的方法:static方法,static方法其实就是普通函数 在

14、static方法中可以调用其他static方法、字段、属性,但是不能调用非static方法、字段、属性。在非static方法中可以调用static的方法、字段。,其他oop问题,namespace,解决类重名问题,就是文件夹。using,引入其他类。System.Collections.ArrayList,快速引入的方法,右键解析。 索引器。public string thisint indexget return ; set ,列表(非范型),数组的局限性:无法对数据中的数据进行动态的增删。 ArrayList(列表,排队)。Add、Clear、Contains、Count、IndexOf、

15、Insert、Remove、RemoveAt、Reverse、Sort、ToArray(再没关系)、索引器。 作业1:输入整数,排序,然后输出 作业2:两个列表的连接、合并。 作业3:分拣奇偶数,MS面试题,集合接口,ArrayList实现了IList, ICollection, IEnumerable接口。 foreach 遍历ArrayList,实现了IEnumerable接口的都可以用foreach进行遍历。 不止ArrayList实现了这些接口。,范型,用ArrayList的麻烦的地方:数据放进去就不知道是什么类型的了;不能防止非法类型数据的放入;将ArrayList返回给其他函数,会令

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论