out和ref-我的理解
2013-02-16 15:35
141 查看
out和ref
相同点:
凡是使用了这两个修饰的,都是引用传递。
不同点:
out 侧重于输出的参数,也就是调用方法是为了通过参数的方式获得值。通常在方法中,需要返回多个值的时候使用。所以,out参数必须在方法返回(结束之前)赋值。
*out有种“醉翁之意不在酒”的感觉。调用使用了含out参数的函数,目的是为了之后,拿出out修饰的那个变量,而不在于之前它的初值是什么,即便当初赋值了,也无妨。
ref 侧重于修改,调用方法是为了在方法中修改这个变量。所以,ref参数必须在传入之前就赋值。
*如同每个月都会发工资,然后你有计划地消费一样。“工资”相当于那个被ref修饰的变量。
out具体代码实现:
...
static void Main(string[] args)
{
Console.WriteLine("请输入你的登录名");
string name = Console.ReadLine();
string msg;//在这里,赋值也无妨,但是属于多余。
OutTest(name, out msg);
Console.WriteLine("使用调用了OutTest函数后的变量msg,msg的值是" + msg);
Console.ReadKey();
}
static void OutTest(string logainName, out string message)
{
//在这个函数中,out修饰的参数,必须被赋值。否则,完成该函数,无法拿出对应的值!
if (logainName == "JamesLiang")
{
message = "登录成功!";
}
else
{
message = "登录失败了";
}
}
ref具体代码实现:
...
static void Main(string[] args)
{
int salary = 3000;//使用之前,必须赋值!
RefTest1(ref salary);
RefTest2(ref salary);
RefTest3(ref salary);
Console.WriteLine("最终薪水还有" + salary.ToString());
}
static void RefTest1(ref int m)
{
m = m - 100;
Console.WriteLine("调用RefTest1方法,薪水还有" + m.ToString());
}
static void RefTest2(ref int m)
{
m = m - 200;
Console.WriteLine("调用RefTest2方法,薪水还有" + m.ToString());
}
static void RefTest3(ref int m)
{
m = m - 300;
Console.WriteLine("调用RefTest3方法,薪水还有" + m.ToString());
}
相同点:
凡是使用了这两个修饰的,都是引用传递。
不同点:
out 侧重于输出的参数,也就是调用方法是为了通过参数的方式获得值。通常在方法中,需要返回多个值的时候使用。所以,out参数必须在方法返回(结束之前)赋值。
*out有种“醉翁之意不在酒”的感觉。调用使用了含out参数的函数,目的是为了之后,拿出out修饰的那个变量,而不在于之前它的初值是什么,即便当初赋值了,也无妨。
ref 侧重于修改,调用方法是为了在方法中修改这个变量。所以,ref参数必须在传入之前就赋值。
*如同每个月都会发工资,然后你有计划地消费一样。“工资”相当于那个被ref修饰的变量。
out具体代码实现:
...
static void Main(string[] args)
{
Console.WriteLine("请输入你的登录名");
string name = Console.ReadLine();
string msg;//在这里,赋值也无妨,但是属于多余。
OutTest(name, out msg);
Console.WriteLine("使用调用了OutTest函数后的变量msg,msg的值是" + msg);
Console.ReadKey();
}
static void OutTest(string logainName, out string message)
{
//在这个函数中,out修饰的参数,必须被赋值。否则,完成该函数,无法拿出对应的值!
if (logainName == "JamesLiang")
{
message = "登录成功!";
}
else
{
message = "登录失败了";
}
}
ref具体代码实现:
...
static void Main(string[] args)
{
int salary = 3000;//使用之前,必须赋值!
RefTest1(ref salary);
RefTest2(ref salary);
RefTest3(ref salary);
Console.WriteLine("最终薪水还有" + salary.ToString());
}
static void RefTest1(ref int m)
{
m = m - 100;
Console.WriteLine("调用RefTest1方法,薪水还有" + m.ToString());
}
static void RefTest2(ref int m)
{
m = m - 200;
Console.WriteLine("调用RefTest2方法,薪水还有" + m.ToString());
}
static void RefTest3(ref int m)
{
m = m - 300;
Console.WriteLine("调用RefTest3方法,薪水还有" + m.ToString());
}
相关文章推荐
- ref,out,params参数的理解
- 深入Ref,Out的理解及其使用
- 对于关键字Ref和Out的理解
- ref,out,params参数的理解
- 关于ref,out,params参数的理解
- 对于关键字Ref和Out的理解
- 深入理解C#之 参数传递 ref out params
- 还不太理解ref、out参数的,进来瞧瞧
- c#基础系列之ref和out的深入理解
- C#中ref 和out 的理解
- Ref,Out的理解及其使用
- out和ref关键字的理解
- C# Out/Ref关键字的理解和区别
- 对于关键字Ref和Out的理解
- 关于C#中ref与out参数的理解
- 对于关键字Ref和Out的理解
- 关于C#中 out/ref的一些个人理解
- 关于c#中”ref”和”out”关键字的一些理解
- ref和out的区别,很容易理解的哦.....
- C#中ref和out的理解