230 likes | 443 Views
第 4 章 面向对象编程方法. 王德俊 上海交通大学继续教育学院. 第 4 章 面向对象编程方法. 4.1一个简单的程序 4.2 类和对象 4.3 类的继承、重载与多态 4.4 运算符的重载 4.5 接口及其实现 4.6 方法的委托 4.7 常用的几个类 4.8 命名空间. 类方法. 1 方法的声明与调用 2 参数传递 3 重载方法 ( 4.3.2 ). 1 方法的声明与调用. C# 中的 方法必须放在类定义中声明 ,也就是说, 方法必须是某一个类的方法 方法遵循 先声明后使用 的规则 , 分 声明与调用 两个环节
E N D
第4章 面向对象编程方法 王德俊 上海交通大学继续教育学院
第4章 面向对象编程方法 4.1一个简单的程序 4.2 类和对象 4.3 类的继承、重载与多态 4.4 运算符的重载 4.5 接口及其实现 4.6 方法的委托 4.7 常用的几个类 4.8 命名空间
类方法 1 方法的声明与调用 2 参数传递 3 重载方法(4.3.2)
1 方法的声明与调用 • C#中的方法必须放在类定义中声明,也就是说,方法必须是某一个类的方法 • 方法遵循先声明后使用的规则,分声明与调用两个环节 (1)声明方法 (2)调用方法
(1) 声明方法 • 声明方法最常用的语法格式为: 访问修饰符 返回类型 方法名(参数列表) {方法体 } • 方法如果是对外提供的服务,则访问修饰符通常是public,以保证在类定义外部能够调用该方法 • 方法的返回类型用于指定由该方法计算和返回的值的类型,可以是任何值类型或引用类型 • 如果方法不返回一个值,则它的返回类型为void • 方法名是一个合法的C#标识符
参数列表在一对圆括号中,指定调用该方法时需要使用的参数个数、各个参数的类型,参数之间以逗号分隔参数列表在一对圆括号中,指定调用该方法时需要使用的参数个数、各个参数的类型,参数之间以逗号分隔 • 参数可以是任何类型的变量 • 如果方法在调用时不需要参数,则不用指定参数,但圆括号不能省略 • 实现特定功能的语句块放在一对大括号中,叫方法体,“{” 和“}”分别表示方法体的开始和结束 • 如果方法有返回值,则方法体中必须包含一个return语句,以指定返回值,该值可以是变量、常量、表达式,其类型必须和方法的返回类型相同 • 如果方法无返回值,在方法体中可以不包含return语句,或包含一个不指定任何值的return语句
(2) 调用方法 • 根据方法被调用的位置,可以分为在方法声明的类定义中调用方法和在方法声明的类定义外部调用方法 • 在方法声明的类定义中调用方法的语法格式为: 方法名(参数列表); • 在方法声明的类定义中调用该方法,实际上是由类定义内部的其他方法成员调用该方法 • 在方法声明的类定义外部调用方法实际上是通过类声明的对象调用该方法,其格式为: 对象名.方法名(参数列表)
2 参数传递 (1) 按值传递 (2)按引用传递
参数传递 • 在方法的声明与调用中,经常涉及方法参数 • 在方法声明中使用的参数叫形式参数(形参) • 在调用方法中使用的参数叫实际参数(实参) • 在调用方法时,参数传递就是将实参传递给形参的过程 • 以例MaxValue为例,声明方法时的形参如下: public int IntMax(int a,int b); • 调用方法时的实参如下: classmax.IntMax(x,y) • 方法参数传递按性质可分为按值传递与 按引用传递
(1) 按值传递 • 参数按值的方式传递是指当把实参传递给形参时,是把实参的值复制(拷贝)给形参,实参和形参对应不同的内存单元: • 这种参数传递方式的特点是,形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全 • 基本类型(包括string)的参数在传递时默认为按值传递
[例SwapInWin] 创建一个Windows应用程序 • 在程序中传递两个文本框中的数据给Swap方法 • 在该方法中交换这两个数据 • 观察文本框中的数据是否受到影响
public voidSwap(string s1,string s2) { strings3=s1;s1=s2;s2=s3; // 交换s1与s2的值 } private void button1_Click(object sender, System.EventArgs e) { if(textBox1.Text==""||textBox2.Text=="") return; Swap(textBox1.Text,textBox2.Text); // 将两个文本框中的数据传递给Swap方法 } • 在Swap方法中交换s1与s2的值,并未对文本框中的数据产生任何影响
(2) 按引用传递 • 方法只能返回一个值,但实际应用中常常需要方法能够修改或返回多个值,可以通过使用按引用传递参数的方式予以实现 • 按引用传递是指实参传递给形参时,不是将实参的值复制给形参,而是将实参的引用传递给形参,实参与形参使用的是同一个内存中的值 • 这种参数传递方式的特点是,当形参的值发生改变时,同时也改变实参的值 • 按引用传递分基本数据类型与类对象数据类型两种情况 • 基本类型参数按引用传递时,实参与形参 前均须使用关键字ref
[例SwapInWinRef] 修改例SwapInWin中的Swap方法声明与调用时的形参与实参修改为按引用传递,观察两个文本框中的数据是否发生变化
由于C#不允许将对象的属性按引用传递,因此代码设计需要变通一下。由于C#不允许将对象的属性按引用传递,因此代码设计需要变通一下。 public voidSwap(ref string s1,ref string s2) // 在形参中增加ref关键字 { strings3=s1; s1=s2; s2=s3; } private void button1_Click(object sender, System.EventArgs e) { if (textBox1.Text==""||textBox2.Text=="") return; string ss1=textBox1.Text,ss2=textBox2.Text; // 将文本框中的值先赋给字符串变量 Swap(ref ss1,ref ss2);// 在实参中增加ref关键字 textBox1.Text=ss1; textBox2.Text=ss2; // 方法调用后,再将相应字符串变量赋给文本框 } • 在Swap方法中交换s1与s2的值,文本框中的数据也相应变化
按引用传递 • 类对象参数总是按引用传递的,所以类对象参数传递不需要使用ref关键字 • 类对象参数的传递,实际上是将实参对数据的引用复制给了形参,所以形参与实参共同指向同一个内存区域
[例SwapInWinObject] 修改例SwapInWinRef,将Swap方法的形参类型设置为文本框类型
publicvoidSwap(TextBox s1,TextBox s2) { TextBox s3=new TextBox( ); s3.Text=s1.Text; s1.Text=s2.Text; s2.Text=s3.Text; } privatevoid button1_Click(object sender, System.EventArgs e) { if(textBox1.Text==""||textBox2.Text=="") return; Swap(textBox1,textBox2); }
3 方法重载 • 为了能使同一名称适用于处理各种类型数据的方法,C#提供了方法重载机制 • 方法重载是声明两个以上的同名方法,实现对不同数据类型的类似功能处理
方法重载 • 方法重载有两点要求: ① 重载的方法名称必须相同 ② 重载的方法,其形参个数或类型必须不同 • 例如: public void Swap(ref int a,ref int b) { } public void Swap(ref float a,ref float b) { } • 以上重载方法能同时处理整型与浮点型数据,从而实现对不同的数据类型进行相同的处理 • 声明了重载方法后,当调用具有重载的方法时,系统会根据参数的类型和个数寻求最匹配的方法予以调用
[例MaxIntFloat] 创建一个控制台应用程序,在该程序中实现对两个整型、浮点型数据比较大小的功能
class MaxIntFloat { // 比较值大小的方法声明 publicint Max(int a, int b) { return a>b?a:b; } publicfloat Max(float a, float b) { return a>b?a:b; } staticvoidMain(string[] args) { int ia=60, ib=80; float fa=5.2f, fb=8.8f; Class1 c=new Class1( ); Console.WriteLine("ia与ib较大的值为:{0}",c.Max(ia,ib)); Console.WriteLine("fa与fb较大的值为:{0}",c.Max(fa,fb)); Console.ReadLine( ); } }
本讲小结 1 类方法的声明与调用 2 参数传递 3 方法重载