c#面向对象基础

gulong

贡献于2013-05-21

字数:0 关键词: .NET开发

————高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家!!!! 北京传智播客教育 www.itcast.cn CCCC####面向对象基础面向对象基础面向对象基础面向对象基础 讲师:杨中科 ————高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家!!!! 面向对象概念 OOP �面向对象不是取代面向过程的。 �类、对象。 “人”是类, “张三 ”是“人”这个类的对象。类是抽象的,对 象是具体的。 按钮就是类,某个按钮就是对象。 对象可以叫做类的实 例。类就像 int,对象就像 10。字段(和类相关的变量),字段就是类 的状态。人这个类有姓名、年龄、身高等字段。类不占内存,对象才 占内存。 �方法,方法就是类能够执行的动作,比如问好、吃饭等。 �类的继承,类之间可以有继承关系,比如 “电脑 ”类可以从 “电器 ”类继 承,这样的好处是 “电脑 ”类只需要定义自己特有的字段、方法就可 以,也就是只要定义内存大小、 CPU型号这些字段或者弹出光驱等方 法就可以。父类、基类。电脑类是电器类的子类。重用。 �面向对象的三个特性:封装、继承、多态。 �没有面向对象的世界中的难题。 ————高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家!!!! 定义类 � class Person{ } 定义方法(类的函数): class Person { public void SayHello() { Console.WriteLine("你好 ,我是 {0}",Name); } } 初始化对象,调用方法: Person tom = new Person(); tom.SayHello(); 对象必须调用构造函数 初始化 “new Person()”后 才能用,不能 Person tom这样声明 ;就调用。 定义字段: class Person { public string 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) 一个类可有有多个实例。 类就是把一系列相关的变量、行为定 义为一个整体。 ————高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家!!!! 成员访问级别 � 字段、方法、属性(后面讲)都可以叫做类的成员,他们都需要定义访问级 别。访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对 象中 “封装 ”的目的。 � 几个访问级别: public(任何地方都可以访问); private(默认级别。只能由 本类中的成员访问)。还有 internal、protected两个级别,以后会讲。 class Person { private string Name; public void GiveName(string name) { Name = name;//拒绝不好听的名字 } public void SayHello() { Console.WriteLine("你好 ,我是 {0}",Name); } } Person tom = new Person(); tom.GiveName("tom"); //tom.Name="tom"; tom.SayHello(); 永远不要把字段 public ————高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家!!!! 属性 惯用法:属性开头字母大写,字段开头字 母小写 class Person { private int age; public int Age { get{return age;} set{age=value;} } public void SayHello() { Console.WriteLine("我的年龄是 {0}",Age); } } �只用 set或者只用 get就可以定义只读 或者只写属性(只写的不常见)例子 �可以为 set、get设置访问级别 �例子,限制非法值的设置 �(.Net3.x)简化 set、get:public int Age{get;set;}。适合于 set、get中没有 特殊逻辑代码的情况。 �看似字段、不是字段。 ————高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家!!!! 构造函数 � 默认构造函数 � 重载构造函数 � 重载构造函数之间互相调用 ————高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家!!!! 继承 public class Chinese:Person { public string HuKou{get;set;} public void KongFu(){....} } Chinese p1 = new Chinese(); p1.Name="李雷 "; p1.HuKou="北京市朝阳区 "; p1.SayHello(); p1.KongFu(); 定义类的时候不指定父 类,则是 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 Chinese(); 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 { get; 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 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 Dog(); 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 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、接口的多态特性、类型转换、 is、as 和类基本一样。举例 ————高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家!!!! 异常与异常处理 � 传统的错误表示方式:错误码。举例。 � 错误码的缺点:不处理则很难发现,每次处理 则很麻烦;难以看出错误的原因;容易使得程 序进入不确定状态。 � try catch。Exception ex 异常也是对象。 � Exception 类主要属性: Message、StackTrace � 发生异常后程序默认就退出了,后续代码不会 被执行。 catch以后的代码则会继续执行。 � 扔出自己的异常 ————高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家!!!! 常量与静态成员 � const常量。常量名要大写。 � 全局变量。 static类变量。 � 不用 new就能用的方法: static方法, static方法其实就是普通函数 ————高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家!!!! 其他 oop问题 � namespace,解决类重名问题,就是文件 夹。 using,引入其他类。 System.Collections.ArrayList,快速引入 的方法,右键解析或者 CtrlShiftF10 � 索引器。 public string this[int index]{get { return ""; }set { }} ————高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家!!!! 列表 (非范型 ) � 数组的局限性:无法对数据中的数据进行 动态的增删。 � ArrayList(列表,排队)。 Add、Clear、 Contains、Count、IndexOf、Insert、 Remove、RemoveAt、Reverse、Sort、 ToArray(再没关系)、索引器。 � 作业 1:输入整数,排序,然后输出 � 作业 2:两个列表的连接、合并。 ————高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家!!!! 集合接口 � ArrayList实现了 IList, ICollection, IEnumerable接口。 � foreach 遍历 ArrayList,实现了 IEnumerable 接口的都可以用 foreach进行遍历。 � 不止 ArrayList实现了这些接口。 ————高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家高级软件人才实作培训专家!!!! 范型 � 用ArrayList的麻烦的地方:数据放进去就 不知道是什么类型的了;不能防止非法类 型数据的放入;将 ArrayList返回给其他函 数,会令调用者很困惑。 � List 除此除外并无不同。 � IEnumerable、ICollection � 除了 List类外,还有很多类支持范型,比 如Dictionary等,待定的类型还可 以不止一个。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档