C#中的類型和函數參數傳遞

1.類型

C#中類型分為兩類:值類型和引用類型

1.值類型

所有值類型繼承自System.ValueType類(這是System.Object的一個子類)

值類型變量是直接存儲數據,值類型變量聲明后,不管是否賦值,編譯器都會為其分配內存,值類型一般存在棧區,內存是自動釋放

值類型包括:

int char short long float double bool byted 結構體類型(struct關鍵字定義)

【注意:string是引用類型】

2.引用類型

所有引用類型繼承自System.Object

變量持有的數據的引用,數據是存在堆區中,引用類型一般存在堆區,內存是由GC釋放

引用類型包括:

string? 所有可以實例化的類(class定義的)? dynamic

2.參數傳遞

1.string類型

這是一個非常特殊的引用類型,如果你直接傳入參數如下:

該函數將傳入的變量統一修改為指定的字符串

//這種寫法,并不能修改函數外的變量的值
public void InitString(string str)
{str = "Init";
}

傳入后,按引用類型的定義來說,這個str肯定被你修改成了"Init",但是很可惜,字符串類型是無法修改的,這樣寫雖然不會報錯,但是功能是有問題的,這時候我們應該使用ref或者out關鍵字進行引用傳遞如下:

public void InitString(out string str)
{str = "Init";
}或者public void InitString(ref string str)
{str = "Init";
}

你或許會說,string類型這不就修改了嗎?但是事實是string是不可變,無法修改的,只能新建,使用ref或者out時都是新建了字符串,然后引用指向了新的字符串

2.值傳遞

值類型作為參數時,如果并非引用傳遞,那使用的是該變量的一個副本(新建的臨時變量)

3.引用傳遞

引用類型除了string外都可以直接作為參數,因為參數復制的是堆區地址,也就是數據的引用,所以修改對外部變量都有效

其次有 ref 和 out 兩個關鍵字,他們定義的參數都可以引用傳遞,直接修改變量的值

教大家怎么記,

ref的意思是參考或者引用,

out就更好記了出去,所以是輸出引用

使用

ref 必須要初始化,函數結束時值可以修改或不修改

out 不需要初始化,函數結束時值必須要修改

作用過程

ref是可以把被引用的值帶入函數中使用的

out傳入參數后,值會被清(即使該參數已經初始化過也一樣)

實際應用

ref一般用于修改變量值或者是交換變量值,或者一些性能優化(使用引用可以使得傳參途中不會新建變量)

//交換x和y的值
public void Swap(ref int x, ref int y)
{int temp = x;x = y;y = temp;
}

out一般用于函數返回值,C#中函數只能返回一個值,但是借助out這個輸出引用,我們可以達到返回多個值的目的

// 方法定義,包含兩個輸出參數
public static void CalculateSumAndDifference(int a, int b, out int sum, out int difference)
{sum = a + b;difference = a - b;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64479.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64479.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android系統查找應用包名以及主activity:

一、查找應用的主activity: pm list packages 發現所有的包 dumpsys package 包名: 獲取所有的包信息,可以所有關鍵詞MAIN來找主activity 也可以通過下面命令找到所有activity,看下面大概率com.android.settings/.Settings為主ac…

微信V3支付報錯 平臺證書及平臺證書序列號

1.平臺證書及平臺證書序列號設置錯誤報錯: 錯誤1: Verify the response’s data with: timestamp1735184656, noncea5806b8cabc923299f8db1a174f3a4d0, signatureFZ5FgD/jtt4J99GKssKWKA/0buBSOAbWcu6H52l2UqqaJKvrsNxvodB569ZFz5G3fbassOQcSh5BFq6hvE…

在Ubuntu下通過Docker部署Mastodon服務器

嘿,朋友們,今天咱們來聊聊如何在Ubuntu上通過Docker部署Mastodon服務器。想要擁有自己的社交媒體平臺?Mastodon就是個不錯的選擇!🌐🚀 Docker與Mastodon簡介 Docker是一個開源的容器化平臺,讓…

Es搭建——單節點——Linux

Es搭建——單節點——Linux 一、安裝 下載安裝包: 官網下載地址:https://www.elastic.co/downloads/elasticsearch 上傳包到linux 切換到安裝目錄下 解壓:tar -zxvf elasticsearch-7.17.1-linux-x86_64.tar.gz 重命名安裝文件夾 mv elastics…

【機器學習】梯度下降

文章目錄 1. 梯度下降概念2. 梯度下降的技巧2.1 動態設置學習率2.2 Adagrad調整梯度2.3 隨機梯度下降(SGD)2.4 特征縮放 3. 梯度下降理論基礎 1. 梯度下降概念 梯度:Loss 對參數在某一點的偏微分,函數沿梯度的方向具有最大的變化…

數據庫在大數據領域的探索與實踐:動態存儲與查詢優化

在大數據時代,數據庫的靈活性與高效性成為數據存儲與分析的重要基石。從關系型數據庫到 NoSQL 數據庫的演進,開發者逐漸可以在結構化與非結構化數據間找到平衡。本文將聚焦大數據場景下的數據庫實踐,尤其是如何動態存儲與查詢復雜數據&#x…

【Python科研數據爬蟲】基于國家標準查詢平臺和能源標準化信息平臺的海上風電相關行業標準查詢信息爬取及處理

基于國家標準查詢平臺和能源標準化信息平臺的海上風電相關行業標準查詢信息爬取及處理 1 背景2 標準檢索平臺2.1 能源標準化信息平臺2.2 全國標準信息公共服務平臺3 標準信息數據的爬取與處理3.1 能源標準化信息平臺的信息爬取3.2 全國標準信息公共服務平臺的信息爬取3.3 標準信…

AWS Certified AI Practitioner 自學考試心得

學習目標: 考取 AWS Certified AI Practitioner 那什么是 AWS Certified AI Practitioner 認證 是基礎級的認證 比較簡單 — 學習內容: 1. AWS網站自學網站 極客時間免費課程:http://gk.link/a/12sJL 配合極客時間課程的章節測試檢驗自…

Ngnix介紹、安裝、實戰及用法!!!

一、Nginx簡介 1、Nginx概述 Nginx (“engine x”) 是一個高性能的 HTTP 和 反向代理服務器,特點是占有內存少,并發能力強,能經受高負載的考驗,有報告表明能支持高達 50,000 個并發連接數 。 2、正向代理 正向代理:如果把局…

05.HTTPS的實現原理-HTTPS的握手流程(TLS1.2)

05.HTTPS的實現原理-HTTPS的握手流程(TLS1.2) 簡介1. TLS握手過程概述2. TLS握手過程細化3. 主密鑰(對稱密鑰)生成過程4. 密碼規范變更 簡介 主要講述了混合加密流程完成后,客戶端和服務器如何共同獲得相同的對稱密鑰…

YOLO11全解析:從原理到實戰,全流程體驗下一代目標檢測

前言 一、模型介紹 二、網絡結構 1.主干網絡(Backbone) 2.頸部網絡(Neck) 3.頭部網絡(Head) 三、算法改進 1.增強的特征提取 2.優化的效率和速度 3.更高的準確性與更少的參數 4.環境適應性強 5.…

C++ 與 Python(靜態類型語言與動態語言)

C 與 Python(靜態類型語言與動態語言) 一、說明 Python和C到底有啥區別?在使用的時候有啥特殊的益處?這種問題的意義在于:如果對語言了解越清楚,越能夠更加大膽地應用哪些極限功能,從而最大限…

Jenkins 構建流水線

在 Linux 系統上安裝 Jenkins 服務,以及配置自動化構建項目 前置準備環境:docker、docker-compose、jdk、maven 一、環境搭建 1. Jenkins 安裝 (1)拉取鏡像 # 安裝鏡像包,默認安裝最新版本 docker pull jenkins/jen…

【Java】面試題 并發安全 (1)

文章目錄 synchronized1. 基本概念與作用2. 使用方式3. 底層原理(基于monitor)4. 面試題回答要點5. 注意事項與進階理解 Java中synchronized鎖相關知識總結Java內存模型(JMM)CAS概述及重要性volatile關鍵字AQS簡介 synchronized …

前端項目 npm報錯解決記錄

1.首先嘗試解決思路 npm報錯就切換yarn , yarn報錯就先切換npm刪除 node_modules 跟 package-lock.json文件重新下載依 2. 報錯信息: Module build failed: Error: Missing binding D:\vue-element-admin\node_modules\node-sass\vendor\win32-x64-8…

深度學習中batch_size

Batch size調整和epoch/iteration的關系 訓練數據集總共有1000個樣本。若batch_size10,那么訓練完全體樣本集需要100次迭代,1次epoch。 訓練樣本10000條,batchsize設置為20,將所有的訓練樣本在同一個模型中訓練5遍,則…

Redis 數據類型全解析:基礎與進階應用場景

前言:Redis 是一個高性能的內存數據庫,支持多種數據類型,能夠高效處理各種場景的數據存儲和操作。 以下是Redis數據類型的數據結構及其應用場景的詳細說明: 基礎數據類型 1. 字符串 (String) 底層數據結構 Simple Dynamic Stri…

評分模型在路網通勤習慣分析中的應用——提出問題(1)

1、問題的由來、目標和意義 最近一段時間和公司其它業務部門討論時,發現一個有趣的交通路網問題,車輛從S點行駛到V點共用時40分鐘,這段時間內路網中的卡口攝像頭識別到了車輛通過的信息。如下圖所示: 設計師需要通過這些有限的路…

leetcode 面試經典 150 題:刪除有序數組中的重復項

鏈接刪除有序數組中的重復項題序號26題型數組解題方法雙指針難度簡單熟練度????? 題目 給你一個 非嚴格遞增排列 的數組 nums ,請你 原地 刪除重復出現的元素,使每個元素 只出現一次 ,返回刪除后數組的新長度。元素的 相對順序 應該保…

提升生產力工具

VSCODE插件 干貨:用好這13款VSCode插件,工作效率提升10倍 - 程序員檸檬 - 博客園 Sourcetrail Sourcetrail 是一個開源且免費的源碼閱讀工具,以其強大的代碼導航、可視化及跨平臺支持特性,成為開發者理解復雜代碼庫的得力助手。…