香蕉视频app

Keep on going never give up.

Let's Go

C# 學習筆記(54)參數傳遞問題剖析

C#Lonely2019-06-05 13:26:13116次0條

在默認情況下,C#方法中的參數傳遞都是按值進行的,但實際上參數傳遞的方式共有4種不同的情況,它們分別為:

香蕉视频app ● 值類型參數的按值傳遞

香蕉视频app ● 引用類型參數的按值傳遞

香蕉视频app ● 值類型參數的按引用傳遞

香蕉视频app ● 引用類型的按引用傳遞


值類型參數的按值傳遞

參數可分為形參和實參兩類,形參指的是被調用方法中的參數,也就是說方法定義中的參數為形參;實參指的是調用方法時,傳遞給對應參數的值。對于值類型的按值傳遞,傳遞的是該值類型實例的一個副本,也就是說形參接收到的是實參的一個副本,被調用方法操作的是實參的一個副本罷了。所以此時,方法中對參數的改變不會影響到實參的值。


引用類型參數按值傳遞

當傳遞的參數是引用類型時,傳遞和操作的目標是指向對象的地址,而傳遞的實際內容是對地址的復制由于地址指向的是實參的值,當方法對地址進行操作時,實際上操作了地址所指向的值,所以調用方法后原來實參的值就會被修改。雖然string類型也是引用類型,然而在按值傳遞時,會有一種特殊情況就是傳遞的參數不會因方法中形參的改變而被修改。造成這個特殊性的原因是string類型具有不可變性


值類型和引用類型參數的按引用傳遞

不管是值類型還是引用類型,使用refout關鍵字可以實現參數按引用傳遞。在按引用進行傳遞時,方法的定義和調用都必須顯式地使用ref或out關鍵字。在按引用傳遞時,不管參數是值類型還是引用類型,其本質都是一樣的,都是通過ref或out關鍵字來告訴編譯器,方法傳遞的是參數地址,而非參數本身

在值類型參數按引用傳遞的過程中,傳遞的是值類型變量的地址,當方法對值類型變量的地址進行操作時,實現的是對值類型變量的實際數據的操作,所以改變了實參中的值。香蕉视频app其效果類似于引用類型的按值傳遞。不同的是,值類型參數按引用傳遞的地址是棧上值類型變量的地址,而引用類型按值傳遞的地址是變量所指向的托管堆中實際數據的地址。

在引用類型參數按引用傳遞的過程中,傳遞的是引用類型變量的地址,該地址是變量在棧上的地址,即傳遞的是引用的引用,而不是引用本身。




暗錨,解決錨點偏移

文章評論

    嘿,來試試登錄吧!