CH10_方法
本章目标
掌握无参方法和带参方法的区别
掌握无返回值类型和有返回值类型方法的区别
掌握方法重载的应用
方法概述 在我们学习 C# 语言的过程中会发现之前的应用程序中默认会生成一个主方法 Main(),它是执行程序的入口和出口。
方法是将完成同一功能的内容放到一起,方便书写和调用的一种方式,也体现了面向对象语言中封装的特性。
语法 1 2 3 4 访问修饰符 修饰符 返回值类型 方法名(参数列表) { 语句块; }
1.访问修饰符
所有类成员访问修饰符都可以使用,如果省略访问修饰符,默认是 private。
2.修饰符
在定义方法时修饰符包括 virtual(虚拟的)、abstract(抽象的)、override(重写的)、static(静态的)、sealed(密封的)。override 是在类之间继承时使用的。
3.返回值类型
用于在调用方法后得到返回结果,返回值可以是任意的数据类型,如果指定了返回值类型,必须使用 return 关键字返回一个与之类型匹配的值。如果没有指定返回值类型,必须使用 void 关键字表示没有返回值。
4.方法名
对方法所实现功能的描述。方法名的命名是以 Pascal 命名法为规范的。
5.参数列表
在方法中允许有 0 到多个参数,如果没有指定参数也要保留参数列表的小括号。参数的定义形式是“数据类型参数名”,如果使用多个参数,多个参数之间需要用逗号隔开。
无参方法 1.定义无参无返回值方法 定义一个生成4位随机数的方法。
1 2 3 4 5 6 7 public void BuilderNum (){ Random d = new Random(); int num= d.Next(1000 , 9999 ); Console.WriteLine(num); }
2.定义无参无有返回值方法 1 2 3 4 5 6 7 public int BuilderNum (){ Random d = new Random(); int num= d.Next(1000 , 9999 ); return num; }
使用方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Program { static void Main (string [] args ) { Test1 t = new Test1(); int num=t.BuilderNum(); Console.WriteLine("随机数:" +num); Console.ReadLine(); } }
有参方法 1.定义有参无返回值方法 定义一个方法实现,计算长方形的周长。
1 2 3 4 5 6 public void CalcPerimeter (int a,int b ){ int s = (a + b) * 2 ; Console.WriteLine("周长:" +s); }
2.定义有参有返回值方法 1 2 3 4 5 6 public int CalcPerimeter (int a,int b ){ int s = (a + b) * 2 ; return s; }
使用方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class Program { static void Main (string [] args ) { Test1 t = new Test1(); int s=t.CalcPerimeter(10 , 5 ); Console.WriteLine("周长:" +s) Console.ReadLine(); } }
可变参数 params 是C#开发语言中关键字, params主要的用处是在给函数传参数的时候用,就是当函数的参数不固定的时候。 在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字.
可变参数特点:
1、若形参中含一个参数数组,则该参数数组必须位于形参列表的最后。
2、不允许将params修饰符与ref和out修饰符组合起来使用。
3、参数数组必须是一维数组。
4、与参数数组对应的实参可以是同一类型的数组,也可以是任意多个与该数组的元素属于同一类型的变量。
5、若实参是数组则按引用传递,若实参是变量或表达式则按值传递。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 class Program { static void Main (string [] args ) { int [] ar = { 22 ,14 ,65 ,21 }; GetMax(23 , 45 , 65 , 77 ); GetMax(ar); Console.ReadLine(); } static void GetMax (params int [] array ) { if (array.Length == 0 ) return ; int max = array[0 ]; for (int i = 1 ; i < array.Length; i++) { if (array[i]>max) { max = array[i]; } } Console.WriteLine(max); } }
可选参数 可选参数是说方法在调用传入值的时候,可以选择传入实参可以不传.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Program { static void Main (string [] args ) { Show("张三" , 22 , 172 ); Show("张三" , 22 , 172 ,"女" ); Console.ReadLine(); } static void Show (string name ,int age,double height,string sex="男" ) { Console.WriteLine("姓名:{0},年龄:{1},身高:{2},性别:{3}" ,name,age,height,sex); } }
命名参数 实参的位置可以不和相应形参一一对应。
命名参数在方法生命的时候没有什么不同,但是在调用的时候需要 如下调用方式
f.fun ( a : 12, b : 10 );
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class Program { static void Main (string [] args ) { Show(age: 21 , height: 172 , name: "李四" ); Console.ReadLine(); } static void Show (string name ,int age,double height ) { Console.WriteLine("姓名:{0},年龄:{1},身高:{2}" ,name,age,height); } }
方法重载 参数列表不同主要体现在参数个数或参数的数据类型不同。在调用重载的方法时系统是根据所传 递参数的不同判断调用的是哪个方法。
案例1 : 创建一个名为 SumUtils 的类,在类中分别定义计算两个整数、两个小数、 两个字符串类型的和,以及从 1 到给定整数的和。在 Main 方法中分别调用定义好的方法。
定义方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 class SumUtils { public int Sum (int a,int b ) { return a + b; } public double Sum (double a,double b ) { return a + b; } public string Sum (string a,string b ) { return a + b; } public int Sum (int a ) { int sum = 0 ; for (int i = 1 ; i < a; i++) { sum += i; } return sum; } }
调用方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Program { static void Main (string [] args ) { SumUtils s = new SumUtils(); Console.WriteLine("两个整数的和为:" + s.Sum(3 , 5 )); Console.WriteLine("两个小数的和为:" + s.Sum(3.2 , 5.6 )); Console.WriteLine("连个字符串的连接结果为:" + s.Sum("C#" , "方法重载" )); Console.WriteLine("1 到 10 的和为:" + s.Sum(10 )); } }
在调用 Sum 时只是传递的参数不同,系统会自动识别参数来调用正确的方法。
案例2 : 定义一个 SayHello 的类,在类中分别定义 3 个构造方法,一个是不带参数 的构造方法,用于打印“Hello”; 一个是带一个参数的构造方法传递一个用户名,用于打 印“Hello Army”(Army 为传入的用户名);一个是带两个参数的构造方法传递一个用户名 和年龄,用于打印“Hello Army,20”(Army 为传入的用户名、20 为传入的年龄)。在 Main 方法中使用不同的构造器创建 SayHello 类的对象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class SayHello { public SayHello () { Console.WriteLine("Hello" ); } public SayHello (string name ) { Console.WriteLine("Hello " + name); } public SayHello (string name, int age ) { Console.WriteLine("Hello " + name + "," + age); } }
1 2 3 4 5 6 7 8 9 10 class Program { static void Main (string [] args ) { SayHello say1 = new SayHello(); SayHello say2 = new SayHello("小明" ); SayHello say3 = new SayHello("张三" , 20 ); } }
作业 1.定义一个圆柱体计算类CircularCalc,
包含计算总面积的方法Area(int r,int h)
包含计算总体积的方法Volume(int r,int h)
编写测试类,完成测试。
2.定义一个长方体计算类CuboidCalc,
包含长(L)、宽(W)、高(H)属性
包含计算总面积的方法Area()
包含计算总体积的方法Volume()
编写测试类,完成测试。