您的位置:首页 > 编程语言 > C#

C#传递参数大集合

2013-11-14 20:06 267 查看
  方法的参数是个值得特别注意的地方。方法的参数传递有四种类型:传值(by value),传址(by reference),输出参数(by output),数组参数(by array)。传值参数无需额外的修饰符,传址参数需要修饰符ref,输出参数需要修饰符out,数组参数需要修饰符params。传值参数在方法调用过程中如果改变了参数的值,那么传入方法的参数在方法调用完成以后并不因此而改变,而是保留原来传入时的值。传址参数恰恰相反,如果方法调用过程改变了参数的值,那么传入方法的参数在调用完成以后也随之改变。实际上从名称上我们可以清楚地看出两者的含义--传值参数传递的是调用参数的一份拷贝,而传址参数传递的是调用参数的内存地址,该参数在方法内外指向的是同一个存储位置。

传值参数示例:

class Program
{
static void Main(string[] args)
{
string m = "m";
string n = "n";
Console.Write("传值参数调用函数之前的值\n" + "m的值为:" + m + "\n" + "n的值为:" + n + "\n\n");
Swap(m, n);
Console.Write("传值参数调用函数之后的值\n" + "m的值为:" + m + "\n" + "n的值为:" + n + "\n");
Console.Read();
}
private static void Swap(string m, string n)
{
string temp;
temp = m;
m = n;
n = temp;
}
}

运行效果:



在调用交换值得方法之后m和n的值仍未改变。

传址参数示例:
class Program
{
static void Main(string[] args)
{
string m = "m";
string n = "n";
Console.Write("传值参数调用函数之前的值\n" + "m的值为:" + m + "\n" + "n的值为:" + n + "\n\n");
Swap(ref m, ref n);
Console.Write("传值参数调用函数之后的值\n" + "m的值为:" + m + "\n" + "n的值为:" + n + "\n");
Console.Read();
}
private static void Swap(ref string m, ref string n)
{
string temp;
temp = m;
m = n;
n = temp;
}
}

执行效果:



在调用了传址函数之后结果明显发生了变化。

输出参数示例:

class Program
{
static void Main(string[] args)
{
string m, n;
Swap(out m, out n);
Console.Write("传值参数调用函数之后的值\n" + "m的值为:" + m + "\n" + "n的值为:" + n + "\n");
Console.Read();
}
private static void Swap(out string m, out string n)
{
m = "m";
n = "n";
string temp;
temp = m;
m = n;
n = temp;
}
}

运行效果:



运行的结果页发生了变化。

由此可知:传址和输出两个的运行效果是相同的,但是他们之间也是有区别的。ref在使用的时候参数必须在调用函数之前进行赋值,而out在使用的时候参数无需之前进行赋值,但是必须进行定义。总结一下可以说是:系统对ref的限制是更少一些的。out虽然不要求在调用前一定要初始化,但是其值在函数内部是不可见的,也就是不能使用通过out传进来的值,并且一定要在函数内赋一个值,或者说函数承担初始化这个变量的责任。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: