關於引用類型作為參數加上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;
            }
        }
    }
}
View Code

其實很簡單,C#中方法中的參數也是一個變量,這個變量也需要有一個地址。

對於引用類型的方法參數,傳入的對象如果不加Ref,方法參數也就是這個變量也將被創建,不過因為是引用類型,所以地址直接指向所傳入對象的地址。所以實際上是有兩個變量,但都指向了同一處地址。
如果加了Ref,那么方法參數這個變量,將不被創建,也就是只有一個變量,指向了一處地址。

引用類型加不加Ref沒有本質區別,只是多個了變量而已。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM