C# 函数 值参数和引用参数.ppt
Visual C#2005程序设计与应用简明教程 第5章 函数 第5章 函 数学习目标:学习目标:掌握如何定义和使用函数;掌握函数之间传送数据的方式;理解变量的作用域;5.1 定义和使用函数5.1.1 定义函数class Program static void write()(无返回值)Console.WriteLine(“Test output from function”);static void Main(string args)write();Console.ReadKey();5.1.2 返回值(有返回值)当函数返回的是一个值的时候,用以下两种方式 修改函数:在函数声明中指定返回值的类型,但不使用关键字void;使用return关键字结束函数的执行,把返回值传送给调用代码;static ()return 必须是一个值,而且必须是,而 可以是任何类型,包括复杂类型。class Program static double write()return 1.2;Console.WriteLine(Test output from function);static void Main(string args)double m=write();Console.WriteLine(m);Console.ReadKey();执行到return语句时,表示从被调函数返回到主调函数继续执行,这个语句后面的代码不会执行。所有的处理路径都必须执行到 return 语句。否则提示错误“并不是所有的处理路径都返回一个值”。static double getval()double checkval;if(checkval5)return 4.7;5.1.3 参数在函数接受参数时,必须指定以下内容:函数在定义中制定接受的参数列表,以及参数类型;在每个函数调用中匹配的参数列表,要求类型、个数、顺序匹配。static void myfunction(string mystring,double mydouble)调用时:myfunction(2.6,”hello”);myfunction(“hello”);namespace ConsoleApplication3 class Program static int maxvalue(int intarray)int maxval=intarray0;for(int i=1;i maxval)maxval=intarrayi;return maxval;static void Main(string args)int myarray=1,8,3,6,2,3,9,3,11,2;int maxval=maxvalue(myarray);Console.WriteLine(the maximum value in myarray is 0,maxval);Console.ReadKey();5.2.1 值参数:把一个值传递给函数使用,函数中此变量的任何修改都不影响函数调用中制定的参数。class Program static void showdouble(int val)val*=2;Console.WriteLine(val doubled=0,val);static void Main(string args)int mynumber=5;Console.WriteLine(mynumber=0,mynumber);showdouble(mynumber);Console.WriteLine(mynumber=0,mynumber);Console.ReadKey();程序输出:mynumber=5;mynumber=10;mynumber=5;5.2 引用参数和值参数 class Program static int showdouble(int val)val*=2;return val;static void Main(string args)int mynumber=5;Console.WriteLine(mynumber=0,mynumber);mynumber=showdouble(mynumber);/Console.WriteLine(showdouble(mynumber);Console.WriteLine(mynumber=0,mynumber);Console.ReadKey();程序输出:mynumber=5;mynumber=10;/mynumber=5;10;mynumber=5;5.2.2 引用参数:函数处理的变量与函数调用中的使用的变量相同,而不仅仅是值相同的变量。因此对该变量进行的任何修改都回影响到用作参数的变量值,只需要用ref关键字指定其为引用参数。ref变量必须初始化过,而且不能为常量。class Program static void showdouble(ref int val)val*=2;Console.WriteLine(val doubled=0,val);static void Main(string args)int mynumber=5;/const int mynumber=5;Console.WriteLine(mynumber=0,mynumber);showdouble(ref mynumber);Console.WriteLine(mynumber=0,mynumber);Console.ReadKey();程序输出:mynumber=5;mynumber=10;mynumber=10;5.3 变量的作用域 class Program static void write()Console.WriteLine(mystring=0,mystring);static void Main(string args)string mystring=该字符串定义在Main()方法中;write();Console.ReadKey();出错原因:应用程序主体Main()中定义的变量mystring不能在write()函数中访问。因为变量有一个作用域,只有在这个作用域中,变量才是有效的。作用域包括定义变量的代码块和直接嵌套在其中的代码块,而函数中的代码块和调用它们的代码块是不同的。class Program static string mystring;static void write()string mystring=write()方法中的mystring变量;Console.WriteLine(局部变量mystring=0,mystring);Console.WriteLine(全局变量mystring=0,Program.mystring);static void Main(string args)string mystring=Main()方法中的mystring变量;Program.mystring=全局变量;write();Console.WriteLine(局部变量mystring=0,mystring);Console.WriteLine(全局变量mystring=0,Program.mystring);Console.ReadKey();若局部变量和全局变量同名,全局变量就会被屏蔽。其它结构中变量的作用域int i;for(i=0;i5;i+)string linenumber=Convert.ToString(i);Console.WriteLine(“0”,linenumber);Console.WriteLine(“最后一行是:0”,linenumber);int i;string linenumber;for(i=0;i5;i+)string linenumber=Convert.ToString(i);Console.WriteLine(“0”,linenumber);Console.WriteLine(“最后一行是:0”,linenumber);int i;string linenumber=0;for(i=0;i5;i+)string linenumber=Convert.ToString(i);Console.WriteLine(“0”,linenumber);Console.WriteLine(“最后一行是:0”,linenumber);变量在使用之前必须进行初始化,变量linenumber是在for循环内初始化的,退出循环时,赋给变量linenumber的值也随之消失,此时在循环外使用linenumber就是非法的。只有在循环外部对变量linenumber进行初始化,才能在循环外部使用linenumber时可以访问在循环内赋给它的值。“最佳实践”原则:在声明和初始化所有变量后,再在程序中使用它们。