




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、下午4时26分,第4章 面向对象的编程基础,4.1 类 4.2 结构 4.3 方法 4.4 属性与索引器,下午4时26分,4.1 类,类与对象 类:一组具有相同数据结构和相同操作(行为)的对象集合,类是封装数据的基本单位。例如:汽车 对象(实例):类的实例化。例如上述汽车类的一个实例:卡车 注意:要使用对象,必须先定义类,然后再创建对象。 对象的生存周期 对象在建立时分配了内存,创建对象实际上作了两个方面的工作: (1)使用new保留字要求系统分配内存; (2)使用构造函数初始化数据。 销毁对象也是做了两个方面的工作: (1)释放占用的内存; (2)将分配给对象的内存归还给堆(Heap)。,下
2、午4时26分,4.1 类的组织,1.类的声明 用class定义类,声明类的形式为: 附加声明 访问修饰符 class 类名称:基类 ,接口序列 字段声明 构造函数 方法 事件 ,注意:中的内容可省略或任选其一,当两者都有时,先基类后接口。,当一个类从另一个类继承时,被继承的类叫做基类。在C#中基类只能有一个。但是一个类可以继承多个接口,当接口序列多于一项时,各项之间用逗号分开。,下午4时26分,4.1 类的组织(续),public class Child / 字段 private int age; private string name; / 不带参数的构造函数 public Child( )
3、 name = none; / 带参数的构造函数 public Child(string name, int age) = name; this.age = age; / 方法 public void PrintChild( ) Console.WriteLine(0, 1 years old., name, age); ,如果不指明,则 默认为private,下午4时26分,4.1 类的组织(续),public class Program public static void Main( ) /使用new关键字创建对象,new后是调用的构造函数 Child child1
4、= 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( ); Console.ReadLine( ); ,输出结果: Child #1: Zhang San, 1
5、1 years old. Child #2: Li Si, 10 years old. Child #3: none, 0 years old.,下午4时26分,4.1.2 构造函数,作用:构造函数是一个特殊的方法,用于在建立对象时对字段进行初始化。 好处:确保每一个对象在被使用之前都适当地进行了初始化的动作。 构造函数特点: 1) 每个类至少有一个构造函数。若程序代码中没有构造函数则系统会自动提供一个默认的构造函数。 2) 一个构造函数总是和它的类名相同。 3) 构造函数不包含任何返回值。 4) 一般使用public定义构造函数,便于在其他函数中创建该类的实例。 一般在构造函数中作初始化工作
6、,对于执行过程用时比较长的程序代码,最好不要放在构造函数中。,下午4时26分,4.1.2 构造函数(续),1、默认构造函数 (1)如果在类中不定义构造函数,系统会提供一个默认的构造函数。 (2)默认构造函数没有参数。 (3)默认构造函数自动将非静态成员初始化为: 数值型:如int、double等,初始化为0。 bool类型:初始化为false. 引用类型:初始化为null。 (4)如果自己定义了类的构造函数,则所有初始化工作由编程者自己完成。,下午4时26分,4.1.2 构造函数(续),2. 重载构造函数 有时候可能会遇到这样的情况:在一个类中的多个方法中都要用到某一个数据成员,而该成员值必须
7、从其他类中传递过来。这时,无参数的构造函数就不能胜任了,解决这个问题最好的办法就是:重载(Overloading)构造函数。,下午4时26分,4.1.2 构造函数(续),class Program public Program( ) Console.WriteLine(null); public Program(string str) Console.WriteLine(str); static void Main( ) Program aa = new Program( ); Program bb = new Program(How are you!); Console.ReadLine(
8、); ,下午4时26分,4.1.3 字段和局部变量,字段:在类或结构中声明的任何类型的“类级别”的变量。 局部变量:指在方法、事件以及构造函数内声明的变量。 public class Program public static int j=20; /静态字段 public static void Main( ) int j=30; /局部变量 Console.WriteLine(j); /输出结果:30 Console.WriteLine(Program.j); /输出结果:20 Console.ReadLine( ); ,下午4时26分,4.1.3 字段和局部变量,引用静态字段: 类名.字段
9、名 引用实例字段: this.字段名 这里的this指当前实例。 public class Program public int j=20; /实例字段 public static void Main( ) int j=30; /局部变量 Console.WriteLine(j); /输出结果:30 Console.WriteLine(this.j); /输出结果:20 ,下午4时26分,4.1.4 静态成员与实例成员,类的成员包括字段、属性、构造函数、方法、事件、索引、嵌套类。 类的成员分静态成员和实例成员。 静态成员在内存中只有一份,采用修饰符static定义。 静态成员要等到应用程序结束
10、时才会退出内存。 把只有创建了类的实例才能够使用的成员叫实例成员;即不用static修饰的成员。 静态成员一般用于表示不会随对象状态而变化的数据或函数,如数学库中的各种三角函数计算方法定义为静态方法。 静态成员的调用:类名.静态成员 实例成员的调用:对象名.实例成员,下午4时26分,4.1.5 访问修饰符,C#中有以下成员访问修饰符: public (常用)任何外部的类都可以不受限制的存取这个类的方法和数据成员。 private (常用)类中的所有方法和数据成员只能在此类中使用,外部无法存取。(默认) protected 除了让本身的类可以使用之外,任何继承自此类的子类都可以存取。 inter
11、nal 在当前项目中都可以存取。该访问权限一般用于基于组件的开发,因为它可以使组件以私有方式工作,而该项目外的其它代码无法访问。 protected internal 只限于当前项目,或者从该项目的类继承的类才可以存取。 partial 局部类型,类的定义和实现可以分布在多个文件中,但都要使用partial标注,基类只需要声明一次,若多次声明则必须完全一致。,下午4时26分,4.2 结构,结构(struct)是由一系列相关的、但类型不一定相同的变量组织在一起而构成的数据表示形式,所有结构类型都隐式地从类型object继承。 例如:public struct Point public int x
12、; public int y; 结构和类的区别与联系: 结构类型是值类型,类类型是引用类型。 凡是定义为结构的,都可以用类来定义。 创建轻量级对象时,可以使用结构。,下午4时26分,结构与类的应用举例,class ClassPoint public int x, y; public ClassPoint(int x, int y) this.x = x; this.y = y; ,struct StructPoint public int x, y; public StructPoint(int x, int y) this.x = x; this.y = y; ,static void Ma
13、in() ClassPoint p = new ClassPoint10; /一个类对象 for (int i = 0; i p.Length; i+) pi = new ClassPoint(i, i); /必须为每个元素创建1个对象 Console.Write(0,1) ,pi.x, pi.y); StructPoint sp = new StructPoint10; /一个结构对象 for (int i = 0; i sp.Length; i+) /不需要为每个元素创建对象,仅有一个结构对象sp足以 Console.Write(0,1) , spi.x, spi.y); ,下午4时26分
14、,4.3 方法,方法(Method)是一组程序代码的集合,每个方法都有一个方法名,便于识别和让其他方法调用。 1. 方法的定义与使用 (1)方法必须放在某个类中。 (2)定义方法的语法形式为: 访问修饰符 返回值类型 方法名称(参数序列) 语句序列 ,下午4时26分,4.3 方法(续),定义方法时,需要注意以下几点: 方法名不能和变量、常数或者任何声明在类中其它的成员相同。 方法可以有参数,也可以没有参数,但是不论是否有参数,小括号都是必需的。如果参数序列中的参数有多个,则以逗号分开。 结束某个方法的执行,可以使用return语句,程序遇到return语句后,会将执行流程交还给调用此方法的程序
15、代码段。此外,还可以用return语句返回一个值。 如果声明一个非void类型的方法,则方法中必须至少有一个return语句。,下午4时26分,方法的定义和调用举例,using System; class Program public int MyMethod( ) Console.WriteLine(this is MyMethod.); int i = 10; return i; static void Main( ) Program method = new Program( ); int j = 5; j = method.MyMethod( ); Console.WriteLine(
16、the value is 0., j); ,下午4时26分,4.3 方法(续),2. 方法中的参数传递 1) 传递值类型的参数,在方法中更改参数的值不会影响到这个方法之外的变量。 值类型参数的格式为: 参数类型 参数名 class Program public static void AddOne(int a) a+; static void Main( ) int a = 3; Console.WriteLine(调用AddOne之前,a=0, a);/a=3 AddOne(a); Console.WriteLine(调用AddOne之后,a=0, a);/a=3 Console.ReadL
17、ine( ); ,下午4时26分,4.3 方法(续),2) 传递引用类型的参数,在方法中更改引用参数的值实际上也就是修改被引用的变量的值。 引用类型参数的格式为: ref 参数类型 参数 class Program public static void AddOne(ref int a) a+; static void Main( ) int a = 3; Console.WriteLine(调用AddOne之前,a=0, a);/a=3 AddOne(ref a); Console.WriteLine(调用AddOne之后,a=0, a);/a=4 Console.ReadLine( );
18、,下午4时26分,4.3 方法(续),3) 输出多个引用类型的参数 输出引用类型参数的格式为: out 参数类型 参数名 使用out表明该引用参数是用于输出的,而且调用该参数时不需要对参数进行初始化。 class Program public static void MyMethod(out int a, out int b) a = 5; b = 6; static void Main( ) int x, y; MyMethod(out x, out y); Console.WriteLine(调用MyMethod之后,x=0,y=1, x, y); Console.ReadLine( );
19、 ,下午4时26分,4.3 方法(续),4) 传递个数不确定的参数 需要传递的参数个数不确定时,可以采用params关键字,其后一般跟一个数组。 class Program public static float Average(params long v) long total, i; for (i = 0, total = 0; i v.Length; +i) total += vi; return (float)total / v.Length; static void Main( ) float x = Average(1, 2, 3, 5); Console.WriteLine(1、
20、2、3、5的平均值为0, x); x = Average(4, 5, 6, 7, 8); Console.WriteLine(4、5、6、7、8的平均值为0, x); ,下午4时26分,4.3 方法(续),3. 方法重载 方法重载是指具有相同的方法名,但参数类型或参数个数 不完全相同的多个方法可以同时出现在一个类中。 class Program public static int Add(int i, int j) return i + j; public static string Add(string s1, string s2) return s1 + s2; public static
21、 long Add(long x) return x + 5; static void Main( ) Console.WriteLine(Add(1, 2); Console.WriteLine(Add(1, 2); Console.WriteLine(Add(10); ,下午4时26分,使用泛型方法代替重载举例,public static void Swap(ref T item1, ref T item2) T temp = item1; item1 = item2; item2 = temp; static void Main( ) Double d1 = 0, d2 = 2; Con
22、sole.WriteLine(交换前:0,1, d1, d2); Swap(ref d1, ref d2); Console.WriteLine(交换后:0,1, d1, d2); 定义一个类或方法时,可以用泛型T代表任何一种类型,而在引用时再指定具体类型。当代码调用泛型方法Swap时,C#编译器会自动将定义的泛型转换为引用代码中指定的类型,从而大大简化了程序员编写代码的复杂度。 如果不使用泛型,就需要写出很多重载的Swap方法,以表示int、float等参数的转换。,下午4时26分,4.4 属性与索引器,属性的作用:可以限制外部对类中数据成员的存取权限。 1.属性的声明和定义 get:用来读
23、取数据成员的值。 set:用来设置数据成员的值。 public class MyClass private int number = 0;/私有字段,外部不可访问 public int MyNumber /属性,用于对私有字段的访问 get return number; set if (value 0) number = value; /value是关键字,其值由编译器自动生成。 ,下午4时26分,4.4.1 属性(续),public class Program public static void Main() MyClass me = new MyClass(); Console.WriteLine(me.MyNumber);/ get me.MyNumber = 5; / set Console.W
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 可行性研究咨询服务合同
- 绿色经济指标统计表
- 长城墙施工方案
- 别墅烟囱施工方案
- 照壁施工方案
- 防疫工程应急施工方案
- 贵州生态园林绿化施工方案
- 横装外墙彩钢板施工方案
- 丽水公路标志杆施工方案
- 平顶山深基坑降水施工方案
- 2024年北京电子科技职业学院高职单招笔试历年职业技能测验典型例题与考点解析含答案
- 《药品经营质量管理规范-令GSP管理》课件
- 2025届新高考数学冲刺复习 突破爪型三角形的八大妙手
- 变电站工程的验收规范
- CJT183-2008 钢塑复合压力管
- 2024年辽宁生态工程职业学院单招职业适应性测试题库一套
- 1《阿Q正传(节选)》公开课一等奖创新教学设计统编版高中语文选择性必修下册
- 幼儿园队列队形训练培训
- 青海梦 混声无伴奏合唱谱
- 中餐厅宴会主题设计方案
- 新风安装合同范本
评论
0/150
提交评论