程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 使用C#中的ref關鍵字,用2個簡單例子來說明

使用C#中的ref關鍵字,用2個簡單例子來說明

編輯:C#入門知識

在C#中,如果在方法參數前面加上ref關鍵字,說明參數傳遞的是引用,而不是值。如何理解呢?

 

  參數是簡單類型的例子

static void Main(string[] args)
        {
            string temp = "a";
            Change(temp);
            Console.WriteLine(temp);

            ChangeByRef(ref temp);
            Console.WriteLine(temp);
            Console.ReadKey();
        }

        private static void Change(string temp)
        {
            temp = temp + "--changed";
        }

        private static void ChangeByRef(ref string temp)
        {
            temp = temp + "--refchanged";
        }

輸出結果:
a
a--refchanged

● 在Change()方法中,雖然改變了temp的值,但方法沒有返回值,打印temp依然是初始值a;
● 在ChnageByRef()方法中,由於加上了關鍵字,雖然也沒有返回值,當改變temp的值後,temp的引用地址發生了改變,再次打印,temp的值為新的引用地址對應的值。

 

  參數是類類型的例子

class Program
    {
        static void Main(string[] args)
        {
            Pet p = new Pet(){Age = 5};
            Console.WriteLine("初始年齡是:{0}", p.Age);
            ChangeAge(p);
            Console.WriteLine("改變pet的屬性值後,年齡是:{0}", p.Age);
            ChangeAgeByRef(ref  p);
            Console.WriteLine("改變pet引用地址後,年齡是:{0}", p.Age);
            Console.ReadKey();
        }

        private static void ChangeAge(Pet p)
        {
            p.Age = 10;
        }

        private static void ChangeAgeByRef(ref Pet p)
        {
            p = new Pet(){Age = 20};
        }
    }

    public class Pet
    {
        public int Age { get; set; }
    }

輸出結果:

● 在ChangeAge()方法中,改變的是Pet實例的屬性值。
● 在ChangeAgeByRef()方法中,改變的Pet實例的引用地址。

 

  總結

方法參數無論是簡單類型,還是類類型,當在其前加上ref關鍵字後,對參數的賦值,實際上是改變的是方法參數變量的引用地址。使用ref注意點:
● 使用帶ref的方法之前,需要給方法參變量賦上初始值
● 無論是定義方法還是使用方法,都要帶上關鍵字ref

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved