C#学习笔记-方法和修饰符
来源:互联网 发布:nginx 多个域名 ssl 编辑:程序博客网 时间:2024/05/18 00:06
1.默认的参数传递行为
参数传入函数的默认行为是按值传递,相当于数据的副本会被传入函数,调用者看不到在函数内容针对这些变量发生了哪些变化,这些变化也不会影响到调用者传递的参数。
static int Add(int x, int y) { int ans = x + y; x = 100; y = 9; return ans; }
在函数Add中,虽然修改了x,y的值,不过这只是表面现象,只是修改的x,y的副本,并不影响传值之前的x,y的本身。如果我们在主函数里这样调用:
static void Main(string[] args) { int x = 9, y = 10; Console.WriteLine("Before call: " + x + "," + y); Console.WriteLine("Answer is: " + Add(x, y)); Console.WriteLine("After call: " + x + "," + y); }得到的结果是:
Before call: 9,10Answer is: 19After call: 9,10对函数体做下面的改变:
static int Add(int x, int y) { int ans = x + y; x = 100; y = 9; return x + y;//返回值109 }这样的结果就是无论传递值是什么,都会返回109.
Before call: 9,10Answer is: 109After call: 9,10
2.out修饰符
接着,将使用输出参数,通过关键字out来定义输出参数,在退出函数之前,需要为输出参数赋值,否则就会有编译错误。引入输出参数的用处是可以通过一个方法输出多个输出值。比如定义下面的函数。static void GetAnswer(int x, int y, out int ansA, out int ansS, out int ansM) { ansA = x + y; ansS = x - y; ansM = x * y; }注意这里函数本身的返回值为void,定义了三个输出参数,分别用来输出两个默认参数的和,差,积。在调用这个函数时,输出参数传递也必须使用out修饰符。
static void Main(string[] args) { int x = 9, y = 10; int ans1, ans2 = 5, ans3; Console.WriteLine("Before call: " + x + "," + y); GetAnswer(x, y, out ans1, out ans2, out ans3); Console.WriteLine("The answers are: " + ans1 + "," + ans2 + "," + ans3); }注意,作为输出参数传递的变量不需要赋值,如ans1,ans3,即使象ans2已经被赋值,这个值也会丢失。输出为:
Before call: 9,10The answers are: 19,-1,90
3.ref修饰符
另外一种修饰符是ref,如果希望方法可以对在调用者作用域中声明的不同数据进行操作(通常就是改变它的值),比如排序和交换,就必须使用引用参数。注意输出参数和引用参数的区别:输出参数不需要在它们被传递给方法之前初始化,因为方法在退出之前必须为输出参数赋值;
引用参数必须在它们被传递给方法之前初始化,因为是在传递一个对已存在变量的引用。如果不赋值,就相当于要对一个未赋值的本地变量进行操作。
考虑下面的方法:
static void SwapThings(ref string s1, ref string s2) { string tempS = s1; s1 = s2; s2 = tempS; }以下面的方式调用:
static void Main(string[] args) { string myname = "Tom", yourname = "Jerry"; Console.WriteLine("My name is " + myname + "." + " Your name is " + yourname + "."); SwapThings(ref myname, ref yourname); Console.WriteLine("My name is " + myname + "." + " Your name is " + yourname + "."); }
输出为:
My name is Tom. Your name is Jerry.My name is Jerry. Your name is Tom.
4.params修饰符
C#使用params关键字支持参数数组的使用,它可以把可变数量的参数(相同类型)作为单个逻辑参数传给方法。static double CalAverage(params double[] values) { Console.WriteLine("You sent me {0} doubles.", values.Length); double sum = 0.0; if (values.Length == 0) return sum; for (int i = 0; i < values.Length; i++) sum += values[i]; return (sum / values.Length); }
正常的想法是我们直接传递一个double数组给这个函数,这是没问题的,其实我们还可以直接给它几个double的数值,用逗号隔开,这样相当于.NET运行库在后台自动把这组double包装成一个double类型的数组。所以有以下的调用方式:
static void Main(string[] args) { double average; average = CalAverage(4.0, 3.2, 5.7, 64.22, 87.2); Console.WriteLine("Average of data is: {0}", average); double[] dats = { 4.0, 3.2, 5.7 }; average = CalAverage(dats); Console.WriteLine("Average of data is: {0}", average); Console.WriteLine("Average of data is: {0}", CalAverage()); }第一种方式就是直接给出一组double数值,第二种方式是以数组的形式传递,第三种方式为空时。
需要注意:为了避免歧义,C#要求方法只支持一个params参数,而且必须是参数列表中的最后一个参数。
0 0
- C#学习笔记-方法和修饰符
- C#学习笔记--方法和参数修饰符
- 黑马程序员之c#学习笔记:总结C#修饰符,成员修饰符和类修饰符
- C# sealed修饰符学习笔记
- Java学习笔记-修饰符可修饰的属性方法
- 学习C#修饰符:类修饰符和成员修饰符
- 学习C#修饰符:类修饰符和成员修饰符
- 学习C#修饰符:类修饰符和成员修饰符
- C#学习笔记(4)----- 属性与修饰符
- 【KK学习笔记】c# 参数修饰符 out ref params
- C#方法参数修饰符
- C# 方法和属性的访问权限修饰符解析
- C#学习之修饰符
- 学习C#020428作用域和修饰符
- C#修饰符和类
- 【.NET 学习笔记】修饰符
- Java学习笔记-修饰符
- C#的?修饰符,和??修饰符的用法
- C陷阱与缺陷读书笔记(第2章)语法“陷阱”
- JAVA String.format 方法使用介绍
- ListView 输入法框遮挡内容
- GitHub和SourceTree入门教程
- 状态模式和策略模式比较
- C#学习笔记-方法和修饰符
- 增加最少的边使有向图变为强连通图
- rails text_field/text_area/hidden_field/password_field
- CSS绘制三角形的原理剖析
- poj 3140 Contestants Division (树形dp)
- android之Service(3)Bound Service
- Freemarker 小技巧
- jfinal后台控制跳转方式
- mysql 10061