方法(函数)Ⅱ<参数>
1、参数
参数可用来返回多个值,并且传入数据给方法使用
1、形参
形参是本地变量,它声明在参数列表中,而不是在方法体中。
public void PrintString(string str) //stu为string类型的形参
{
Console.WriteLine(str);
}
[可选]访问修饰符 + 返回类型 + 函数名(参数类型 + 参数名){ 表达式; }
2、实参
实参是方法调用时的调用时传入的数据。
class Porgram
{
static public void PrintString(string str)
{
Console.WriteLine(str);
}
static void Main()
{
PrintString("今天是2020年1月4日!"); //调用PrintString方法,并传入"今天是2020年1月4日!"
string str1 = "现在时间是20:15!"; //定义str1变量
PrintString(str1); //调用PrintString方法,并传入str1变量
}
}
输出结果
今天是2020年1月4日!
现在时间是15:03!
2、值参数
值参数是将实参的值复制给形参
float Add(float var1, float var2) //方法声明
{
float var3 = var2 + var1;
return var3;
}
void Avg()
{
Add(2.4, 5.67); //方法调用
float a = 5.55;
Add(a, 8.88); //方法调用
}
3、引用参数(ref)
引用参数使用时必须使用ref 修饰符, 实参必须是变量 ,且用作实参前必须被赋值。
引用参数使用时是将实参的内存地址传给形参 ,所以方法执行后实参的值也会被方法改变
class Myclass
{
public int year = 18; //初始化字段为18
}
class Porgram
{
//声明PrintYear函数,并把它的两个形参声明为引用参数
static void PrintYear(ref Myclass myclass, ref int year1)
{
myclass.year = myclass.year + 1;
year1 = year1 + 1;
Console.WriteLine("myclass.year:{0} , year1:{1}", myclass.year, year1);
}
static void Main()
{
int a = 20;
Mycalss mc = new Myclass();
Console.WriteLine("mc.year:{0} , year1:{1}", mc.year, a); //输出初始值
PrintYear(ref mc, ref a); //调用PrintYear函数
Console.WriteLine("mc.year:{0} , year1:{1}", mc.year, a); //再次输出
}
}
输出结果
mc.year:18 , year1:20
myclass.year:19 , year1:21
mc.year:19 , year1:21 //变量值被改变
4、输出参数(out)
引用参数使用时必须使用out 修饰符, 实参必须是变量
与引用不同,输出参数用作实参前可不被赋值
同样输出参数也是传变量地址给形参
void MyFunction(out int var1)
{ ... }
...
int a;
MyFunction(out a);
5、参数类型总结
因为上述三种参数类型有时很难记住它们的不同特征,所以下表给它们总结,便于我们对照和比较。
参数类型语法使用总结
参数类型 | 修饰符 | 是否在声明时使用 | 是否在调用时使用 | 执行 |
---|---|---|---|---|
值 | 无 | 系统把实参的值复制但形参 | ||
引用 | ref | 是 | 是 | 形参是实参的别名 |
输出 | out | 是 | 是 | 仅包含一个返回值。形参是实参的别名 |