C#圖解教程-方法參數筆記(上)


 

      一晃大學四年要過去了,期間亂點了很多技能點, 導致每一項技能都只是處於入門階段。為了將C#作為我的主要技能,准備惡補相關姿勢(知識),通過各種技術論壇的推薦,找到了《C#圖解教程》這本書。初一看,感覺只不過都只是把知識羅列了出來而已,而且很多都是已知的,但是看到后面,發現它把很多以前模糊不清的知識變得清晰了,而且還學到了以前都沒有學到的新知識。特別結合圖片的解釋,讓初學者更加容易理解。

不多說,這次想將本書第五章方法有關參數相關知識進行梳理。

 

1、參數知識點

參數類型有值參數、引用參數、輸出參數、參數數組這么四種。上面的都是位置參數,另外C#還提供了命名參數和可選參數(和python極其類似)。

 

2、值參數

使用值參數,通過將實參的值復制到形參的方式把數據傳遞給方法。方法調用的時候,做了如下的操作:

1、在棧中為形參分配空間

2、講實參的值復制給形參

我們來舉一個例子,看代碼:

結果如下:

好了,我們用圖解的形式來解釋下,它是如何在堆棧中執行的:

 一句話說:如果方法內部對參數做了賦值操作(引用類型內部成員賦值),跳出方法后,值類型參數還是不變,引用類型參數值會發生改變。

 

3、引用參數

使用引用參數,需要這兩點

1、必須在方法的聲明和調用中都使用def修飾符;

2、實參必須是變量,在用作實參之前必須被賦值。如果是引用類型變量,可以賦值一個引用或null。

 對於值參數而言,系統會在棧上為形參分配內存。而引用參數會具有以下這兩個特點

1、不會為形參在棧上分配內存空間;

2、形參的參數名將作為實參的別名,指向相同的內存位置。

我們來舉一個例子,看代碼:

結果如下:

好了,我們用圖解的形式來解釋下,它是如何在堆棧中執行的:

 

一句話說:如果方法內部對參數做了賦值操作,跳出方法后,值類型參數和引用類型參數值都會發生改變

 

3、引用類型作為值參數和引用參數

之前看到兩個例子,引用類型作為值參數和引用參數結果都會發生改變。但是要注意一點的是,他們改變的都是引用類型內部成員的值。

現在我們來看看,如果對引用類型本身賦值一個新對象會發生什么。我想通過上面兩幅圖應該也很容易知道了。

下面代碼展示引用類型作為值參數傳遞:

 結果如下:

好了,我們用圖解的形式來解釋下,它是如何在堆棧中執行的:

下面代碼展示引用類型作為引用參數傳遞(只加了ref):

 結果如下:

好了,我們用圖解的形式來解釋下,它是如何在堆棧中執行的:

總結:本質來說值參數實際就將實參在棧上復制了一份給形參,方法內部對形參做操作,執行方法后,會在棧上自動銷毀,而實參不受影響。而引用參數則是相當於實參的別名,方法內部對實參做操作,執行方法后,實參受影響。


免責聲明!

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



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