C#學習筆記 - 方法參數

  • [摘要]:
    傳值參數(值傳遞 )方法中的[參數]會爲傳進來的 [變量] 創建一個副本,而在引用傳遞中,不會創建一個副本,方法中的 [參數] 是直接指向 [變量] 。
    在方法中,如果使用new操作符生成了一個新對象。引用傳遞的結果是對方法之外的 [變量] 產生影響,將[變量]指向更改爲新對象。但值傳遞的結果是不會對方法之外的 [變量] 的數據產生影響。

一、劉鐵猛《C#語言入門詳解》全集-P18節,方法(Method) 的值傳遞 和 ref引用傳遞 背後的內存機理的理解。

在這裏插入圖片描述

  • 1、值傳遞 -> 傳入一個引用類型參數
    值傳遞 -> 傳入一個引用類型參數1
  • 2、引用傳遞 -> 傳入一個引用類型參數
    常見情形
  • 3、理解1+2 的區別:
    傳值參數(值傳遞 )方法中的[參數]會爲傳進來的 [變量] 創建一個副本,而在引用傳遞中,不會創建一個副本,方法中的 [參數] 是直接指向 [變量] 。
    在方法中,如果使用new操作符生成了一個新對象。引用傳遞的結果是對方法之外的 [變量] 產生影響,將[變量]指向更改爲新對象。但值傳遞的結果是不會對方法之外的 [變量] 的數據產生影響。

二、各種參數的使用示例

  • 1、值傳遞-情況1:
    值傳遞 -> 傳入一個值類型參數

  • 2、值傳遞-情況2:
    傳值函數(值傳遞一個對象實例),在內存中創建了實際參數的副本,怎麼理解這句話?下圖中,賦值前,方法中的[參數]創建了一個實際[變量]的副本。如如果你在方法中,對參數 使用操作符new 創建了一個新對象,並對這個新對象做出一些更改,那麼這個new操作不會影響 方法之外的 [變量]所指的對象數據。這就是創建了副本的意義。
    下面這種傳值方式,在工作中,很少見。
    值傳遞 -> 傳入一個引用類型參數1
    下圖中,賦值後,通過傳進來的[參數]修改對象的成員狀態,在方法結束後,再通過[變量]訪問對象,該對象成員狀態已經被上面的方法修改過了。
    值傳遞 -> 傳入一個引用類型參數2
    值傳遞對象 測試代碼

  • 3、引用傳遞-情況1:
    在這裏插入圖片描述

  • 4、引用類型-情況2:
    4.1、常用情形:
    常見情形
    在這裏插入圖片描述
    4.2、不常用情形:
    在這裏插入圖片描述

  • 5、輸出參數-情況1:
    在這裏插入圖片描述
    5.1、out-傳入值類型示例:
    double.TryParse()方法的實現,同樣的,需要知道的是,在轉換類型失敗,double.TryParse()也會將傳入的參數值更改成0。
    在這裏插入圖片描述

  • 6、輸出參數-情況2:
    在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

  • 7、數組參數:
    在這裏插入圖片描述
    示例1:不用params關鍵字修飾
    在這裏插入圖片描述
    示例2:用params關鍵字修飾,使用方便、簡潔。
    在這裏插入圖片描述
    示例3:使用params的其他方法
    在這裏插入圖片描述

三、參數使用場景總結

在這裏插入圖片描述