资源预览内容
第1页 / 共69页
第2页 / 共69页
第3页 / 共69页
第4页 / 共69页
第5页 / 共69页
第6页 / 共69页
第7页 / 共69页
第8页 / 共69页
第9页 / 共69页
第10页 / 共69页
亲,该文档总共69页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第3章 面向对象的编程基础,3.1 面向对象的程序设计 3.1.1 类的组织 3.1.2 构造函数 3.1.3 方法 3.1.4 属性 3.1.5 事件,3.2 常用类操作和数据处理 3.2.1 Convert类 3.2.2 String类 3.2.3 StringBuilder类 3.2.4 DataTime类和 TimeSpan类 3.2.5 Math类,3.1 面向对象的程序设计,类与对象 类:一组具有相同数据结构和相同操作的对象的 集合. 例如:汽车 对象(实例):类的实例化 . 例如:卡车 要使用对象,必须先定义类,然后再创建对象。,3.1.1 类的组织,1.类的声明 用class定义类,声明类的形式为: 附加声明 访问修饰符 class 类名称:基类 ,接口序列 字段声明 构造函数 方法 事件 ,注意:中的内容可省或任选其一,当两者都有时,先基类后接口,3.1.1 类的组织(续),public class Child private int age; private string name; / 不带参数的构造函数 public Child() name = “none“; / 带参数的构造函数 public Child(string name, int age) ,3.1.1 类的组织(续),this.name = name; this.age = age; / 输出方法 public void PrintChild() Console.WriteLine(“0, 1 years old.“, name, age); public class Program ,3.1.1 类的组织(续),public static void Main() /使用new关键字创建对象,new后是调用的构造函数 Child child1 = new Child(“Zhang San“, 11); Child child2 = new Child(“Li Si“, 10); Child child3 = new Child(); / 显示结果 Console.Write(“Child #1: “); child1.PrintChild(); Console.Write(“Child #2: “); child2.PrintChild(); Console.Write(“Child #3: “); child3.PrintChild();,3.1.1 类的组织(续),Console.ReadLine(); 2.对象的生存周期 对象在建立时分配了内存,创建对象实际上作了 两个方面的工作: (1)使用new保留字要求系统分配内存; (2)使用构造函数初始化数据。,3.1.1 类的组织(续),C#也允许在程序中定义析构函数(定义方法与 C+类似),但是 C#不允许在程序中调用析构函 数,而只能由垃圾回收器调用,原因是如果把销毁 对象的工作全部交给编程者通过调用析构函数完 成,而系统不自动实现销毁的功能,一旦编程者忘 记销毁对象,就会引起内存泄漏问题。所以采用垃 圾回收机制自动销毁不再使用的对象。 因此,我们编写程序时不需要定义析构函数,而 是由系统自动定义,自动调用。,3.1.1 类的组织(续),注意,虽然C#不允许在程序中直接调用析构函数 销毁对象,但是可以调用安全的Dispose方法销毁 对象,在对性能要求比较高的场合,调用Dispose 方法直接销毁对象还是很有用的。 垃圾回收机制是在它认为适当的时候自动回收不 再使用的内存的,即检测没有被引用的对象,然后 销毁之。 销毁对象也是做了两个方面的工作: (1)释放占用的内存; (2)将分配给对象的内存归还给堆(Heap)。,3.1.1 类的组织(续),3 字段和局部变量 字段:指声明为类一级的对象或值类型的变量。 局部变量:指在方法、事件以及构造函数内声明的变量。 public class Program public static int j=20; /字段 public static void Main() ,3.1.1 类的组织(续),int j=30; /局部变量 Console.WriteLine(j); /输出结果:30 Console.WriteLine(Program.j); /输出结果:20 Console.ReadLine(); 当字段和局部变量名相同时,如果要引用静态字段,可以 使用下面的形式: 类名.字段名 如果是实例字段,则使用下面的形式: this.字段名 这里的this指当前实例。 当然,如果没有出现字段和局部变量名重名的情况,引用 字段的形式和引用局部变量的形式相同。,3.1.1 类的组织(续),4. 静态成员与实例成员 类的成员 类的成员包括字段、属性、构造函数、方法、事件、索引、嵌套类。 类的成员分静态成员和实例成员 静态成员在内存中只有一份 静态成员要等到应用程序结束时才会退出内存。 把只有创建了类的实例才能够使用的成员叫实例成员。,3.1.1 类的组织(续),5. 访问修饰符 C#中有以下成员访问修饰符: Public (常用)任何外部的类都可以不受限制的存 取这个类的方法和数据成员。 private (常用)类中的所有方法和数据成员只能在 此类中使用,外部无法存取。(默认) Protected 除了让本身的类可以使用之外,任何继承 自此类的子类都可以存取。,3.1.1 类的组织(续),Internal 在当前项目中都可以存取。该访问权限一 般用于基于组件的开发,因为它可以使组件以私有 方式工作,而该项目外的其它代码无法访问。 Protected internal 只限于当前项目,或者从该项目 的类继承的类才可以存取。 Partial 局部类型,类的定义和实现可以分布在多个 文件中,但都要使用partial标注,基类只需要声明 一次,若多次声明则必须完全一致。,3.1.2 构造函数,构造函数是一个特殊的方法,用于在建立对象时 进行初始化的动作,在C#中,每当创建一个对象 时,都会先调用类中定义的构造函数。 使用构造函数的好处是它能够确保每一个对象在 被使用之前都适当地进行了初始化的动作。 另外,构造函数还具有以下特点: 1) 每个类至少有一个构造函数。若程序代码中没 有构造函数则系统会自动提供一个默认的构造函数。2) 一个构造函数总是和它的类名相同。,3.1.2 构造函数(续),3) 构造函数不包含任何返回值。 默认构造函数 (1)如果在类中不定义构造函数,系统会提供一个 默认的构造函数。 (2)默认构造函数没有参数。,3.1.2 构造函数(续),(3)默认构造函数自动将非静态成员初始化为: 数值型:如int、double等,初始化为0。 bool类型:初始化为false. 引用类型:初始化为null。 (4)如果自己定义了构造函数,则不会自动进行初 始化。,3.1.2 构造函数(续),2. 重载构造函数 有时候可能会遇到这样的情况:在一个类中的多 个方法中都要用到某一个数据成员,而该成员值必 须从其他类中传递过来。这时,无参数的构造函数 就不能胜任了,解决这个问题最好的办法就是:重 载(Overloading)构造函数。,3.1.2 构造函数(续),using System; using System.Collections.Generic; using System.Text; namespace OverloadingExample class Program public Program() Console.WriteLine(“null“); ,3.1.2 构造函数(续),public Program(string str) Console.WriteLine(str); static void Main() Program aa = new Program(); Program bb = new Program(“How are you!“); Console.ReadLine(); ,3.1.3 方法,方法(Method)是一组程序代码的集合,每个方 法都有一个方法名,便于识别和让其他方法调用。 1. 方法的定义与使用 (1)方法必须放在某个类中。 (2)定义方法的语法形式为: 访问修饰符 返回值类型 方法名称(参数序列) 语句序列 ,3.1.3 方法(续),定义方法时,需要注意以下几点: 方法名不能和变量、常数或者任何声明在类中其 它的成员相同。 方法可以有参数,也可以没有参数,但是不论是否有参数,小括号都是必需的。如果参数序列中的参数有多个,则以逗号分开。 结束某个方法的执行,可以使用return语句,程序遇到return语句后,会将执行流程交还给调用此方法的程序代码段。此外,还可以用return语句返回一个值。,3.1.3 方法(续),如果声明一个非void类型的方法,则方法中必须至少有一个return语句。 using System; using System.Collections.Generic; using System.Text; namespace MethodExample class Program public int MyMethod() ,3.1.3 方法(续),Console.WriteLine(“this is MyMethod.“); int i = 10; return i; static void Main() Program method = new Program(); int j = 5; j = method.MyMethod();,3.1.3 方法(续),Console.WriteLine(“the value is 0.“, j); Console.ReadLine(); 2. 方法中的参数传递 1) 传递值类型的参数 值类型参数的格式为: 参数类型 参数名,3.1.3 方法(续),using System; using System.Collections.Generic; using System.Text; namespace ValueTransferExample class Program public static void AddOne(int a) a+; ,3.1.3 方法(续),static void Main() int a = 3; Console.WriteLine(“调用AddOne之前,a=0“, a); AddOne(a); Console.WriteLine(“调用AddOne之后,a=0“, a); Console.ReadLine(); ,3.1.3 方法(续),2) 传递引用类型的参数 引用类型参数的格式为: ref 参数类型 参数名 using System; using System.Collections.Generic; using System.Text; namespace ReferenceTransferExample class Program public static void AddOne(ref int a) ,3.1.3 方法(续),a+; static void Main() int x = 3; Console.WriteLine(“调用AddOne之前,x=0“, x); AddOne(ref x); Console.WriteLine(“调用AddOne之后,x=0“, x); Console.ReadLine(); ,3.1.3 方
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号