方法
方法标准式
<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;
else
result = 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#图解教程》