c# 基础之方法

方法:方法其实就是函数(Function),优点就是方便重复使用,使代码简洁。

方法参数分:

1)值参数,不含修饰符

2)引用参数,以ref修饰符声明

3)输出参数,以out修饰符声明

4)数组型参数,以params声明

最长用的语法格式:

        //语法:[访问修饰符] 返回值 方法名(参数1,参数2)
        public static int NewMethod(int a,int b)
        {
            return a > b ? a : b;       //max
        }

1.  值传递:

     值传递是方法默认的参数类型,采用的是值复制的方式。把实参值复制给形参,所以这种参数传递方式的特点是形参的值发生改变时,不会影响实参的值,从而保障了实参数据的安全

 1         public static void ChangeValue(int x,int y)
 2         {
 3             int temp = x; //交换x y值
 4             x = y;
 5             y = temp;
 6         }
 7
 8         static void Main(string[] args)
 9         {
10             int x = 1, y = 2;
11             ChangeValue(x, y);
12             Console.WriteLine("x = {0},y = {1}", x, y);
13             Console.ReadKey();
14             /*
15              * 输出结果为: x=1, y=2
16              * 方法内的x y放生了改变,但是没影响方法外的x y.
17              */
18         }

2.引用传递分(ref和out)

首先:两者都是按地址传递的,使用后都将改变原来参数的数值。

其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空。这个就是两个的区别,或者说就像有的网友说的,ref是有进有出,out是只出不进。

所以:使用ref,实参必须是赋值后的变量。纯值 如:1、3、“2年级一班”的实参就会报错。

 1         public static int GetMaxMin(int[] arr, ref int min)
 2         {
 3             int max = arr[0];
 4             min = arr[0];       //ref 参数 在方法内可以不赋值
 5             for (int i = 1; i < arr.Length; i++)
 6             {
 7                 if (max < arr[i])
 8                 {
 9                     max = arr[i];
10                 }
11                 if (min > arr[i])
12                 {
13                     min = arr[i];
14                 }
15             }
16             return max;
17         }
18
19         static void Main(string[] args)
20         {
21             int min, max;
22             min = 0; //ref 实参变量使用前必须赋值,并且直接修改此值.
23             //定义随机数,遍历成数组
24             Random ro = new Random();
25             int[] myArray = new int[10];
26             for (int i = 0; i < myArray.Length; i++)
27             {
28                 myArray[i] = ro.Next(1, 100);
29             }
30             //遍历数组
31             for (int i = 0; i < myArray.Length; i++)
32             {
33                 Console.Write(myArray[i].ToString() + ",");
34             }
35             //调用方法返回最大值
36             max = GetMaxMin(myArray, ref min);
37             Console.WriteLine("方法返回值max = {0},ref参数修改后min = {1}", max, min);
38             Console.ReadKey();
39
40         }

ref参数

使用out,和ref差不多。区别out参数变量在方法外可以不赋值但是在方法内必须重新赋值。所以使用out是无法将实参的值带入到方法体内的。我估计作用:将方法体中的值带出方法外。

比如求数组中最大值和最小值的方法,事例如下:

 1         public static int GetMaxMin(int[] arr, out int min)
 2         {
 3             int max = arr[0];
 4             min = arr[0];       //out 在方法体内必须赋值.
 5             for (int i = 1; i < arr.Length; i++)
 6             {
 7                 if (max < arr[i])
 8                 {
 9                     max = arr[i];
10                 }
11                 if (min > arr[i])
12                 {
13                     min = arr[i];
14                 }
15             }
16             return max;
17         }
18
19
20         static void Main(string[] args)
21         {
22             int min, max;//out 返回min可以不赋值
23             //定义随机数,遍历成数组
24             Random ro = new Random();
25             int[] myArray = new int[10];
26             for (int i = 0; i < myArray.Length; i++)
27             {
28                 myArray[i] = ro.Next(1, 100);
29             }
30             //遍历数组
31             for (int i = 0; i < myArray.Length; i++)
32             {
33                 Console.Write(myArray[i].ToString() + ",");
34             }
35             //调用方法返回最大值
36             max = GetMaxMin(myArray, out min);
37             Console.WriteLine("方法返回值max = {0},out参数返回值 min = {1}", max, min);
38             Console.ReadKey();
39
40         }

out参数

4.   数组型参数类型(params类型)

params关键字可以指定在参数数目可变处采用参数的方法参数。也就是说。使用params可以自动把你传入的值按照规则转换为一个新建的数组。
在方法声明中的 params关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params关键字。

 1         public static int GetSum(ref int avg, params int[] total)
 2         {
 3             int sum = 0;
 4             for (int i = 0; i < total.Length; i++)
 5             {
 6                 sum += total[i];
 7             }
 8             avg = sum / total.Length;       //平均成绩
 9             return sum;
10         }
11
12         static void Main(string[] args)
13         {
14             //定义各科变量
15             int chainese, english, math,total,avg;
16             avg =0;     //ref实参变量必须赋值
17             chainese = 88;
18             english = 90;
19             math = 62;
20             total = GetSum(ref avg, chainese, english, math);//最后的3个参数传入到total数组中了
21             Console.WriteLine("你的总成绩{0}分,平均成绩{1}",total,avg);
22             Console.ReadKey();
23             /*总成绩240,平均80
24              *
25              */
26
27         }

params,事例

方法重载:1.方法名相同。2.方法参数个数或参数类型不同其中ref和out与无ref和out也能构成方法重载。

事例,通过2个整数相加、3个数相加、2个小数相加

 1         //x为两数中最大数
 2         public static int Add(ref int x ,int y) //参数int 2个 其中参数1添加ref
 3         {
 4             int temp;
 5             temp = x;
 6             x = x > y ? x : y;
 7             return temp + y;
 8         }
 9         public static int Add(int x,int y)  //参数int 2个
10         {
11             return x + y;
12         }
13
14         public static int Add(int x, int y,int z)   //参数int 3个
15         {
16             return x + y+z;
17         }
18         public static double Add(double x, double y) //参数double 3个
19         {
20             return x + y;
21         }
22
23
24         static void Main(string[] args)
25         {
26             int sum1, sum2, refSum, max;
27             max = 10;
28             double sum3;
29             sum1 = Add(10, 20);
30             sum2 = Add(10, 20, 30);
31             sum3 = Add(10.5, 20.5);
32             refSum = Add(ref max, 20);
33             Console.WriteLine("sum1 ={0},sum2 ={1},sum3 ={2},refSum ={3},max = {4}", sum1, sum2, sum3, refSum, max);
34             Console.ReadKey();
35             /*max传入方法时值 10.方法结束后max = 20
36              * 返回值sum1 =30,sum2 =60,sum3 =31,refSum =30,max = 20
37              */
38         }

方法重载

时间: 2024-10-15 22:02:56

c# 基础之方法的相关文章

C#基础—匿名方法(Anonymous Mehod)

1.引入匿名方法 早在C# 2.0中就提出了匿名方法,实现了以一种内联的方式声明委托,在此之前,声明委托唯一的方法是"命名方法",虽然 C# 3.0 里有了lambda ,使得写内联代码更加简洁和方法,但是匿名方法依然有他的用处,匿名方法提供了可以忽略参数列表的能力. 2.匿名方法的使用和注意点 什么匿名方法?简单的理解就是没有定义名字的方法(其实编译器还是帮我们生成了一个方法).代码的实现就是把方法的定义和方法的实现内联到了一起. 先看个演示例子: 1 class Program 2

1.28 Java基础总结 ①方法重载②构造方法

1.28 Java基础总结 ①方法重载②构造方法 一.方法的重载在同一个类中,方法名相同,形参列表不同访问修饰符.返回类型和是否重载无关:按顺序对应的形参列表类型不同即可 二.构造器在类创建一个实例时被调用,构造方法只能用new关键字调用目的:初始化实例,初始化类属性(0,0.0,null,false)无返回值,和类名一致,用来构造对象作用:为对象分配内存, 创建并初始化成员变量(通过类创建,所以可以在static方法中调用构造方法) 返回引用,引用.属性:引用.方法(所以无返回值) 三.构造方

js写基础insertAfter()方法

DOM没有提供insertAfter()方法,使用js写一个基础的insertAfter()方法. ? 1 2 3 4 5 6 7 8 9 10 11 12 <script type="text/javascript"> function insertAfter(newElement,targetElement){     var parent = targetElement.parentNode;     if(targetElement == parent.lastCh

附录A培训实习生-面向对象基础(3):方法重载

就上一篇代码而言,你如果写Cat cat = new Cat();会直接报错错误 : 1       “Cat”方法没有采用“0”个参数的重载 E:\大话设计模式学习\BigDesignPatterns\附录A培训实习生之面向对象基础\动物运动会\AnimalGames\Form1.cs       20     23     AnimalGames 原因就是必要给小猫起名字.如果当真需要不起名字也要生出小猫来,可以采用方法重载. 方法重载提供了创建同名的多个方法的能力,但这些方法需使用不同的参

SaltStack介绍——SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流

SaltStack介绍和架构解析 简介 SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltStack提供了一个动态基础设施通信总线用于编排,远程执行.配置管理等等.SaltStack项目于2011年启动,年增长速度较快,五年期固定基础设施编制和配置管理的开源项目.SaltStack社区致力于保持盐项目集中.友好.健康.开放.  简单来说它的两大基础功能就是:配置管理.远程命令执行.剩下就是根据

Java基础02 方法与数据成员(转载)

对象中的数据成员表示对象的状态.对象可以执行方法,表示特定的动作. 此外,我们还了解了类(class).同一类的对象属于相同的类型(type).我们可以定义类,并使用该定义来产生对象. 调用同一对象的数据成员 方法可以调用该对象的数据成员.比如下面我们给Human类增加一个getHeight()的方法.该方法返回height数据成员的值: public class Test{    public static void main(String[] args){        Human aPer

OC基础之方法和参数的命名规范

以前学过C/C++/Java/C#语言的童鞋可能刚开始对于OC的方法和参数的命名规范大为不爽 举例来说,如下一个OC方法: - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 这个方法,如果在传统的C++编程语言中应该是: void tableViewCom

java在acm中常用基础技巧方法

java在acm中常用基础技巧方法 如果学到了新的技巧,本博客会更新~ input @Frosero import java.util.*; public class Main { static String a; static int c; static Scanner cin = new Scanner(System.in); public static void main(String[] args) { while(cin.hasNext()){ // while(scanf("%d&q

Scrapy里Selectors 四种基础的方法

在Scrapy里面,Selectors 有四种基础的方法xpath():返回一系列的selectors,每一个select表示一个xpath参数表达式选择的节点css():返回一系列的selectors,每一个select表示一个css参数表达式选择的节点extract():返回一个unicode字符串,为选中的数据re():返回一串一个unicode字符串,为使用正则表达式抓取出来的内容 /html/head/title: 选择HTML文档<head>元素下面的<title> 标

千锋教育Vue组件--vue基础的方法

课程地址: https://ke.qq.com/course/251029#term_id=100295989 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>vue基础的方法</title&