1.方法的声明
[修饰符] 返回类型 方法名称(参数列表)
{
方法体
}
若方法没有返回值,则返回类型为void,此时return语句是可选的。
2.调用方法
静态方法调用通过类名.方法名()的方式;实例方法调用时,需先使用new关键字实例化一个对象,再通过对象名.方法名()来调用。
class Program { static void Main(string[] args) { Console.WriteLine("Pi is " + MathTest.GetPi()); int x = MathTest.GetSquareOf(5); Console.WriteLine("Square of 5 is " + x); MathTest math = new MathTest(); math.value = 10; Console.WriteLine("Value field of math variable contains " + math.value); Console.WriteLine("Square of 10 is " + math.GetSquare()); } } class MathTest { public int value; public int GetSquare() { return value * value; } public static int GetSquareOf(int x) { return x * x; } public static double GetPi() { return 3.14159; } }
输出内容:
3.传参
方法参数可以通过引用或值传递给方法。在传递给方法之前,无论是引用传递还是值传递,变量都必须初始化。
变量通过引用传递给方法时,在方法内部所作的改变在方法退出之后仍然有效;若通过值传送给方法,方法调用后,变量仍然为原始值。
C#中,除非特别指定,所有的引用类型都通过引用传递,所有的值类型都通过值来传递。
特殊情况:字符串是不可变的,改变字符串的值,会创建一个全新的字符串,所以字符串无法采用一般引用类型的行为方式。方法调用时,对字符串做任何改变都不会影响原始字符串。
static void SomeFunction(int[] ints,int i) { ints[0] = 100; i = 100; } static void Main(string[] args) { int i = 0; int[] ints = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; Console.WriteLine("调用方法前,参数值为:"); Console.WriteLine("i=" + i); Console.WriteLine("ints[0]=" + ints[0]); Console.WriteLine("调用方法后,参数值为:"); SomeFunction(ints, i); Console.WriteLine("i=" + i); Console.WriteLine("ints[0]=" + ints[0]); }
输出:
4.ref参数
使用ref关键字,可以使得值参数通过引用的方式传送给方法;此时,对该变量所做的任何改变都会影响原始值。调用方法时,也需要添加ref关键字。
static void SomeFunction(int[] ints,ref int i) { ints[0] = 100; i = 100; } static void Main(string[] args) { int i = 0; int[] ints = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; Console.WriteLine("调用方法前,参数值为:"); Console.WriteLine("i=" + i); Console.WriteLine("ints[0]=" + ints[0]); Console.WriteLine("调用方法后,参数值为:"); SomeFunction(ints,ref i); Console.WriteLine("i=" + i); Console.WriteLine("ints[0]=" + ints[0]); }
输出:
5.out参数
使用out关键字,可以使得传递给方法的变量不初始化。调用方法时,也需要使用out关键字。
static void SomethingFunction(out int param) { param = 100; } static void Main(string[] args) { int param; SomethingFunction(out param); Console.WriteLine(param);//输出:100 }
6.命名参数
参数一般需要按定义的顺序传送给方法。但命名参数则可以按任意顺序传递。若方法有多个参数,可以在同一个调用中混合使用位置参数和命名参数。
public class Test { public void FullName(string firstNamse,string lastName) { Console.WriteLine(firstNamse + " " + lastName); return; } }
以下两种调用方式输出相同内容:
Test test = new Test(); test.FullName("Yunyun", "Zhao"); test.FullName(lastName: "Zhao", firstNamse: "Yunyun");
7.可选参数
可选参数必须设置默认值,同时是方法定义中的最后参数。
public void OptionalMethod(int notOptional,int optional=10) { Console.WriteLine(notOptional + optional); }
8.方法重载
在同个一类中,方法名相同,但参数列表不同(即参数个数、类型和顺序不同),和返回类型、参数名称无关。
public void DoSomething(int param1) { } public void DoSomething(int param1,int param2) { } public void DoSomething(int param1,double param2) { } public void DoSomething(double param1,int param2) { }
参考书籍:《C#高级编程(第9版)》