方法和修饰参数符
1、参数修饰符
参数修饰符 | 作用 |
---|---|
(无) | 如果一个参数没有用参数修饰符标记,则认为它按值传递(pass by value),这意味着被调用的方法收到的是原始数据副本(例子如下,调用Swap(aa, bb)方法不会发生数据的转换,但是调用void Swap(Class a, Class b)方法,由于传递的是对象(引用类型),数据会进行转换) |
ref | 调用者赋初值,并且可以由被调用的方法可选地重新赋值(数据按引用传递)如果调用的方法没有给ref参数赋值,则参数的值为传递的变量的值( Swap(ref aa, ref bb)方法转换了两个参数的值) |
out | out参数的值必须由调用方法赋值,数据按引用传递(pass by reference),如果调用方法没有给out参数赋值,会出现编译错误提示(所以定义out传入参数,不需要初始化;Swap(aa, out cc)方法输出cc的值为b) |
params | params参数修饰符允许将一组可变 的参数作为独立的逻辑参数传递。一个方法只能有一个params修饰符,且修饰符必须是最后一个参数(如Param(string[] arrStr)方法,此处只显示了最基础的传参调用) |
2、可选参数
顾名思义,调用方法的参数可以传值,也可以不传值。不传值的话,可选参数使用形参默认值。注:可选参数必须在必须参数后面(如void Info(string a, string b = “”)方法)
3、使用命名参数调用方法
这个是调用方法的一种特殊形式,如void NamedParameters(string a, string b = “”, string c = “”)这个方法的情境下,可选参数b不需要赋值,使用命名参数再好不过。注意:使用命名参数时,冒号(:)前的参数名称必须和形参名称一致。
4、方法重载
定义很简单:定义一组名称相同的方法时,如果它们的参数数量(或类型)不同,这就叫做方法重载;
总结就是两必须,一可以
参数数量或类型必须不同,返回值可以不同
(注:前两条必须满足其一,后一条返回值类型不同是不能构成重载的)
本例中的Swap方法就是方法重载的具体实现。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("无参数修饰符 特殊string类型:");
string aa = "a", bb = "b", cc;
Swap(aa, bb); //无参数修饰符 特殊string类型
Console.WriteLine($"aa={aa},bb={bb}");
Console.WriteLine("ref参数修饰符:");
Swap(ref aa, ref bb); //ref参数修饰符
Console.WriteLine($"aa={aa},bb={bb}");
Console