关于引用类型作为参数加上ref与不加ref的区别
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.IO; using System.Net.Sockets; using System.Threading; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Test a = new Test(); a.Message = "初始值"; Test001(a); Console.WriteLine("没有添加ref关键字,也没有对引用参数引用了新的一个Test类型的对象,结果为:{0}", a.Message); Test b = new Test(); b.Message = "初始值"; TestRef(b); Console.WriteLine("没有添加ref关键字,并重新对引用参数引用了新的一个Test类型的对象,结果为:{0}", b.Message); Test c = new Test(); c.Message = "初始值"; TestRef(ref c); Console.WriteLine("关键字ref关键字,并重新对引用参数引用了新的一个Test类型的对象,结果为:{0}", c.Message); Console.Read(); } static void TestRef(Test t) { t = new Test(); t.Message = "对象已赋值"; } static void TestRef(ref Test t) { t = new Test(); t.Message = "对象已赋值"; } static void Test001(Test t) { t.Message = "对象已赋值"; } } public class Test { private string _message; public string Message { get { return _message; } set { _message = value; } } } }
其实很简单,C#中方法中的参数也是一个变量,这个变量也需要有一个地址。
对于引用类型的方法参数,传入的对象如果不加Ref,方法参数也就是这个变量也将被创建,不过因为是引用类型,所以地址直接指向所传入对象的地址。所以实际上是有两个变量,但都指向了同一处地址。
如果加了Ref,那么方法参数这个变量,将不被创建,也就是只有一个变量,指向了一处地址。
引用类型加不加Ref没有本质区别,只是多个了变量而已。
posted on 2016-04-12 16:21 liuslayer 阅读(2560) 评论(0) 编辑 收藏 举报