溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中參數的傳遞方式是什么

發(fā)布時間:2022-08-01 09:27:58 來源:億速云 閱讀:120 作者:iii 欄目:開發(fā)技術

這篇文章主要講解了“C#中參數的傳遞方式是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C#中參數的傳遞方式是什么”吧!

值類型參數按值傳遞

    class Program 
    { 
        static void Main(string[] args) 
        { 
            int a = 10; 
            Add(a); 
            Console.WriteLine("傳遞之后的值為:" + a); 
            Console.ReadKey(); 
        }
 
        private static void Add(int i) 
        { 
            Console.WriteLine("傳遞之前的值為:" + i); 
            i = i + 10; 
           
        } 
    }

結果:

C#中參數的傳遞方式是什么

可見,值類型參數在被方法調用的時候,是對本身實例的拷貝和操作,在方法調用前后參數值不變。

引用類型參數按值傳遞

當引用類型參數傳遞時,是對托管堆上對象實例內容的操作。
也就是引用類型按值傳遞,傳遞的是引用變量的指針,指向托管堆上的對象實例。

    class Program 
    { 
        static void Main(string[] args) 
        { 
            Student student = new Student(); 
            Add(student); 
            Console.WriteLine("參數傳遞之后的值為:" +student._score); 
            Console.ReadKey(); 
        }
 
 
        private static void Add(Student s) 
        { 
           Console.WriteLine("參數傳遞之前的值為:" + s._score); 
            s._score = 90; 
        } 
    }
 
    public class Student 
    { 
        public int _score = 80; 
    }

結果

C#中參數的傳遞方式是什么

可見,引用類型參數在被方法調用的時候,是針對變量的引用的操作,一旦引用對象內容發(fā)生改變,原來變量的值也隨著改變。

按引用傳遞 ref和out

引用類型參數按值傳遞和按引用傳遞的不同之處:

  • 按值傳遞,傳遞的是參數本身的值,即引用指針。

  • 按引用傳遞,傳遞的是參數的地址,也就是實例指針。

另外,值類型也有按引用傳遞,這時候,傳遞的是值類型的地址。

   class Program 
    { 
        static void Main(string[] args) 
        { 
            int i = 100; 
            string str = "one"; 
            ChangeByValue(ref  i); 
            ChangeByRef(ref str); 
            Console.WriteLine(i); 
            Console.WriteLine(str);
 
            Console.ReadKey(); 
        }
 
        private static void ChangeByValue(ref int iValue) 
        { 
            iValue = 200; 
        }
 
        private static void ChangeByRef(ref string sValue) 
        { 
            sValue = "One more"; 
        } 
    }

C#中參數的傳遞方式是什么

可見,不管是值類型,還是引用類型,加入關鍵字ref作為參數,就意味著是對參數地址的操作,即托管堆上實例地址的改變。

另外:

  • 如果需要按引用傳遞,方法的定義和方法的調用,都要顯式地使用ref和out。

  • 如果一個方法的參數除了ref和out關鍵字不同,還有其他參數不同,這才構成方法的2個重載。如果僅僅ref和out關鍵字不同,會報錯"...不能僅在ref和out上有差別的重載方法"。

ref和out使用時的不同點:

out告訴編譯器,參數會在方法內部初始化,而在方法之前不需要初始化。

int x;
Foo(out x);

ref告訴編譯器,參數在方法之前必須初始化。

int y = 0;
Foo(ref y);

特殊引用類型string的傳遞

    class Program 
    { 
        static void Main(string[] args) 
        { 
            string str = "Old String"; 
            Console.WriteLine("傳遞之前的值為:" + str); 
            ChangeStr(str); 
            Console.WriteLine("傳遞之后的值為:"+str); 
            Console.ReadKey(); 
        }
 
        private static void ChangeStr(string astr) 
        { 
            astr = "Change String"; 
        } 
    }

結果:

C#中參數的傳遞方式是什么

C#中參數的傳遞方式是什么

可見,雖然string是引用類型,但按值傳遞的表現和值類型按值傳遞的表現一樣。

感謝各位的閱讀,以上就是“C#中參數的傳遞方式是什么”的內容了,經過本文的學習后,相信大家對C#中參數的傳遞方式是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI