.net(c#)中ref的特殊用法
来源:互联网 发布:扑火陈小春知乎 编辑:程序博客网 时间:2024/05/16 15:24
我们都知道ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。对传值调用使用ref相信大家都有经验,对传递本身就是引用类型的参数有什么别的不同吗?请看例子:
using System;
namespace ConsoleApplication2
{
public class Employee
{
private string name;
public Employee()
{
}
public string Name
{
get { return name; }
set { name = value; }
}
}
public class Test
{
public static void CallEmployee(Employee e)
{
e.Name = "Zhang";
}
public static void CallEmployeeByRef(ref Employee e)
{
e.Name = "Zhang";
}
public static void CallNewEmployee(Employee e)
{
e = new Employee();
e.Name = "li";
}
public static void CallNewEmployeeByRef(ref Employee e)
{
e = new Employee();
e.Name = "li";
}
public static void Main()
{
Employee E1 = new Employee();
E1.Name = "Wang";
CallEmployee(E1);
Console.WriteLine(E1.Name);
Employee E2 = E1;
CallEmployeeByRef(ref E2);
Console.WriteLine(E2.Name);
if (Object.ReferenceEquals(E1, E2))
{
Console.WriteLine("Equals.");
}
else
{
Console.WriteLine("Not Equals.");
}
Employee E3 = new Employee();
E3.Name = "Wang";
CallNewEmployee(E3);
Console.WriteLine(E3.Name);
Employee E4 = E3;
CallNewEmployeeByRef(ref E4);
Console.WriteLine(E4.Name);
if (Object.ReferenceEquals(E3, E4))
{
Console.WriteLine("Equals.");
}
else
{
Console.WriteLine("Not Equals.");
}
}
}
}
第一次输出“Equals.”,而第二次输出“Not Equals.”。可见,不光按引用传递值类型是有用的, ref 对于传递引用类型也是很有用的。这允许被调用的方法修改该引用所引用的对象,因为引用本身是按引用来传递的。上面的示例显示出当引用类型作为 ref 参数传递时,可以更改对象本身。
- .net(c#)中ref的特殊用法
- C#中ref、out及特殊说明参数的用法
- Linux中C语言的特殊用法
- C#、ASP.NET中ref和out的区别
- C#、ASP.NET中ref和out的区别
- C#/.NET中关于ref与out的区别
- c#中ref的用法
- vue 中 ref 的用法
- C#.NET:ref和out的区别
- C#.NET:ref和out的区别
- C#.NET:ref和out的区别
- c#中ref跟out的用法
- c#中ref和out的用法
- c#中ref和out的用法
- Vue2中ref属性的用法
- C语言中宏(macro)的特殊用法
- c#.net中参数修饰符ref,out ,params
- c#.net中参数修饰符ref,out ,params
- 总结一下JSP、JavaSript的传参
- c#下常用函数
- PL/SQL DEVELOPER中的专用复制(Special Copy)
- Visual Studio Express Edition
- Gattaca-千钧一发
- .net(c#)中ref的特殊用法
- IIS+Resin使IIS支持jsp (结合最新版3.0.18的Resin)
- 应届毕业生少走弯路的十条忠告
- 关于客户端及服务器端需求的初步分析
- 在ASP.NET中防止注入攻击
- 如何保证上线用户的唯一性
- VMWare真是个好东西!
- Application.SetCompatibleTextRenderingDefault的作用及使用方法
- 如何点击按钮弹出新窗口,输入数据后返回并刷新页面?(转自孟子E章)