欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中參數(shù)的傳遞方式詳解

 更新時(shí)間:2022年07月31日 11:56:18   作者:Darren Ji  
本文詳細(xì)講解了C#中參數(shù)的傳遞方式,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

值類型參數(shù)按值傳遞

    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; 
           
        } 
    }

結(jié)果:

可見,值類型參數(shù)在被方法調(diào)用的時(shí)候,是對(duì)本身實(shí)例的拷貝和操作,在方法調(diào)用前后參數(shù)值不變。

引用類型參數(shù)按值傳遞

當(dāng)引用類型參數(shù)傳遞時(shí),是對(duì)托管堆上對(duì)象實(shí)例內(nèi)容的操作。
也就是引用類型按值傳遞,傳遞的是引用變量的指針,指向托管堆上的對(duì)象實(shí)例。

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

結(jié)果

可見,引用類型參數(shù)在被方法調(diào)用的時(shí)候,是針對(duì)變量的引用的操作,一旦引用對(duì)象內(nèi)容發(fā)生改變,原來(lái)變量的值也隨著改變。

按引用傳遞 ref和out

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

  • 按值傳遞,傳遞的是參數(shù)本身的值,即引用指針。
  • 按引用傳遞,傳遞的是參數(shù)的地址,也就是實(shí)例指針。

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

   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"; 
        } 
    }

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

另外:

  • 如果需要按引用傳遞,方法的定義和方法的調(diào)用,都要顯式地使用ref和out。
  • 如果一個(gè)方法的參數(shù)除了ref和out關(guān)鍵字不同,還有其他參數(shù)不同,這才構(gòu)成方法的2個(gè)重載。如果僅僅ref和out關(guān)鍵字不同,會(huì)報(bào)錯(cuò)"...不能僅在ref和out上有差別的重載方法"。

ref和out使用時(shí)的不同點(diǎn):

out告訴編譯器,參數(shù)會(huì)在方法內(nèi)部初始化,而在方法之前不需要初始化。

int x;
Foo(out x);

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

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"; 
        } 
    }

結(jié)果:

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

總結(jié)

  • 引用類型按值傳遞,改變的是引用變量指向的托管堆上對(duì)象實(shí)例的內(nèi)容。
  • 引用類型按引用傳遞,改變的是引用變量指向的托管堆上對(duì)象實(shí)例的地址。

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • 探討如何用委托處理排序

    探討如何用委托處理排序

    本篇文章是對(duì)用委托處理排序進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Unity實(shí)現(xiàn)人物旋轉(zhuǎn)和移動(dòng)效果

    Unity實(shí)現(xiàn)人物旋轉(zhuǎn)和移動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)人物旋轉(zhuǎn)和移動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • 一篇文章教會(huì)你用Unity制作網(wǎng)格地圖生成組件

    一篇文章教會(huì)你用Unity制作網(wǎng)格地圖生成組件

    網(wǎng)格地圖這個(gè)功能在策略型游戲中應(yīng)用比較廣泛,基本情況下會(huì)將地圖分割成正方形網(wǎng)格或者六邊形網(wǎng)格,這篇文章主要給大家介紹了如何通過一篇文章學(xué)會(huì)用Unity制作網(wǎng)格地圖生成組件的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • C#如何自定義線性節(jié)點(diǎn)鏈表集合

    C#如何自定義線性節(jié)點(diǎn)鏈表集合

    C#如何自定義線性節(jié)點(diǎn)鏈表集合,這篇文章主要為大家詳細(xì)介紹了C#基于泛型的自定義線性節(jié)點(diǎn)鏈表集合示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C#生成隨機(jī)數(shù)功能示例

    C#生成隨機(jī)數(shù)功能示例

    這篇文章主要介紹了C#生成隨機(jī)數(shù)功能,涉及C#數(shù)學(xué)運(yùn)算與字符串操作相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2017-01-01
  • C#使用DeflateStream解壓縮數(shù)據(jù)文件的方法

    C#使用DeflateStream解壓縮數(shù)據(jù)文件的方法

    這篇文章主要介紹了C#使用DeflateStream解壓縮數(shù)據(jù)文件的方法,較為詳細(xì)的分析了DeflateStream方法對(duì)文件進(jìn)行壓縮及解壓縮的步驟與技巧,需要的朋友可以參考下
    2015-04-04
  • C# XML文件操作之相機(jī)參數(shù)保存和讀取

    C# XML文件操作之相機(jī)參數(shù)保存和讀取

    XML是可擴(kuò)展標(biāo)記語(yǔ)言是一種數(shù)據(jù)語(yǔ)言,它將數(shù)據(jù)以一種簡(jiǎn)單的文本格式存儲(chǔ),可以被人類和幾乎任何計(jì)算機(jī)理解。本文將利用C#實(shí)現(xiàn)相機(jī)參數(shù)讀取并保存至XML文件,感興趣的可以學(xué)習(xí)一下
    2022-11-11
  • C#多線程TPL模式下使用HttpClient

    C#多線程TPL模式下使用HttpClient

    這篇文章介紹了C#多線程TPL模式下使用HttpClient的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • C++泛型編程Generic?Programming的使用

    C++泛型編程Generic?Programming的使用

    本文主要介紹了C++泛型編程Generic?Programming的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C#獲取指定目錄最后寫入時(shí)間的方法

    C#獲取指定目錄最后寫入時(shí)間的方法

    這篇文章主要介紹了C#獲取指定目錄最后寫入時(shí)間的方法,涉及C#中LastWriteTime屬性的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04

最新評(píng)論