方法
方法标准式
<Access Specifier> <Return Type> <Method Name>(Parameter List)
{
Method Body
}
让我们逐一对每一个模块进行解释:
- Access Specifier:访问修饰符,这决定了接下来的主题的可见性,包含public,private...
- Return type:主体的返回类型,一个方法可以返回一个值。返回类型是方法返回的值的数据类型。如果不返回任何值,则返回类型为 void。
- Method name:本次定义的方法的名称。
- Parameter list:参数列表,使用圆括号括起来,该参数是用来传递和接收方法的数据。参数列表是指方法的参数类型、顺序和数量。
- Method body:方法主体,包含了完成任务所需的指令集。
方法的调用顺序为,先讲方法所属的对象进行实例化,然后使用方法名进行调用。
举例:
using System;
namespace test
{class test{public int compare(int a,int b){int result;if (a > b)result = a;elseresult = b;return result;}static void Main(){int a = 100;int b = 120;test Study = new test();int result = Study.compare(a,b);Console.WriteLine(result);}}}
方法参数
传值参数
这种方式复制参数的实际值给函数的形式参数,实参和形参使用的是两个不同内存中的值。在这种情况下,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。
定义形式为不带任何修饰符的参数,在方法体中调用不会影响主程序中实参,因为并未对实参储存位置进行操作。
using System;
namespace test
{class test{public void swap(int a,int b){int temp = a;a = b;b = temp;}static void Main(){int a = 100;int b = 120;test Study = new test();Console.WriteLine(a);Study.swap(a,b);Console.WriteLine(a);}}
}
我们在test类中定义了一个交换函数,通过调用想要将a,b的值进行交换,让我们将上述代码运行后发现,两次输出a的值都为100,并没有将函数swap并没有将主函数中a,b的值交换。
引用参数
这种方式复制参数的内存位置的引用给形式参数。这意味着,当形参的值发生改变时,同时也改变实参的值。
声明引用参数时需要携带修饰符ref,调用时也需要对传入的参数携带修饰符ref;
引用参数的储存位置就是实参的储存位置,相当于方法调用时,将实参的储存位置赋给了函数的形参中。
using System;
namespace test
{class test{public void swap(ref int a,ref int b){int num = a;a = b;b = num;}static void Main(){int a = 100;int b = 120;test Study = new test();Console.WriteLine(a);Study.swap(ref a,ref b);Console.WriteLine(a);}}
}
输出参数
这种方式可以返回多个值。其目的在于返回一个数值,而不是为了改变。
return 语句可用于只从函数中返回一个值。但是,可以使用 输出参数 来从函数中返回两个值。输出参数会把方法输出的数据赋给自己
using System;
namespace test
{class test{public void input(out int x){int num = 100;x = num;}static void Main(){int a = 500;test Study = new test();Study.input(out a);Console.WriteLine(a);}}
}
数组参数
数组参数的定义传值参数类似,但必须是形参列表中的最后一个,使用params进行修饰
using System;
namespace test
{class Program{static int Qiuhe(params int[] intArray){int sum = 0;foreach (var item in intArray){sum += item;}return sum;}static void Main(){int[] a = new int[] {1,2,3};int num = Qiuhe(a); //静态类型不能通过实例类型进行访问int result = Quite(1,2,3,4,5,6);Console.WriteLine(num);}}
}
using System;
namespace test
{class Program{static void Express(params string[] strArray){foreach (var item in strArray){Console.WriteLine(item);}}static void Main(){string str = "TIM;TOM;AMY";string[] result = str.Split(';',';');Express(result); }}
}
具名参数&可选参数
具名参数:
对于其他方法严格要求形参带入的位置,通过使用具名参数可以无视参数传递的顺序。
using System;
namespace test
{class Program{static void swap(int a,int b){Console.WriteLine(a);Console.WriteLine(b);}static void Main(){int a = 100;int b = 200;swap(a:b,b:a);}}
}
可选参数:
参数因为具有“默认值”而使得可选。
using System;
namespace test
{class Program{static void swap(int a = 200,int b = 100){Console.WriteLine(a);Console.WriteLine(b);}static void Main(){swap(); //具有默认值可以直接使用函数而不需要传参}}
}
扩展方法(this 参数)
方法必须是公有且静态,public static进行修饰
必需是形参列表中的第一个,由this修饰
using System;
using System.Collections.Generic;
namespace test
{class Program{static void Main(){double x = 3.14;double y = x.Round(4);Console.WriteLine(y);}}static class DoubleExtension{public static double Round(this double input,int digits){double result = Math.Round(input,digits);return result;}}}
参考资料
-《C#图解教程》