20250528-C#知識:函數簡介及函數重載

C#知識:函數簡介及函數重載

本文主要介紹函數參數和函數重載相關的知識點


1、函數

  • 函數一般寫在類中

  • 一般函數調用

        static int Add(int num, int value){num += value;return num;}
            //一般函數調用,發生值類型參數的復制int num = 1;Add(num, 1);    //調用 Add(int num, int value)Console.WriteLine(num); //1

2、ref和out

2.1 ref

  • 必須初始化,它變我也變
  • 類似C++中的引用,不需要在被調用函數中賦值
  • ref函數形參不能有默認值
        static int Add(ref int num, int value){num += value;return num;}
            int num2 = 1;Add(ref num2, 1);   //調用 Add(ref int num, int value)Console.WriteLine(num2);    //2

2.2 out

  • 可以不初始化,它變我也變
  • 需要在被調用函數中賦值
  • out函數形參不能有默認值
        static int Add2(out int num, int value){num = 100;num += value;   return num;}
            int num3 = 2;   //這個賦值沒啥子用,在被調用函數值又會重新賦值Add2(out num3, 2);  //調用 Add2(out int num, int value)Console.WriteLine(num3);    //102

3、params變長參數

  • 在函數調用時,可以傳入多個相同類型的實參
  • 只能有一個形參為params類型,且必須是最后一個
        static int Add(int num, params int[] values){foreach (int value in values) { num += value;}return num;}
            int num4 = Add(0, 1, 2, 3); //調用 Add(int num, params int[] values)Console.WriteLine(num4);    //6

4、默認參數

  • 可以為多個形參設置默認值,但是有默認值的形參后面所有形參必須都有默認值
        static int Add3(int num, int value = 1){num += value;return num;}
            int num5 = Add3(20);    //調用 Add3(int num, int value = 1)Console.WriteLine(num5);    //21

5、函數重載

  • 方法簽名不同(參數類型或參數個數不同)的同名函數構成重載
  • ref int 或者out int 可以和 int 構成重載
  • ref 與 out 不存在重載
  • params int[]可以和 int 構成重載
  • params int[] 不能與 int[] 構成重載
  • 默認值不構成重載
        static int Add(int num, int value){num += value;return num;}//ref int 可以和 int 構成重載static int Add(ref int num, int value){num += value;return num;}//ref 與 out 不存在重載//static int Add(out int num, int value)//{//    num += value;//    return num;//}static int Add2(out int num, int value){num = 100;num += value;   return num;}// params int[]可以和 int 構成重載static int Add(int num, params int[] values){foreach (int value in values) { num += value;}return num;}//params int[] 不能與 int[] 構成重載//static int Add(int num, int[] values)//{//    foreach(int value in values)//    {//        num += value;//    }//    return num;//}//默認值不構成重載//static int Add(int num , int value = 1)//{//    num += value;//    return num;//}static int Add3(int num, int value = 1){num += value;return num;}

6、完整代碼示例:

namespace FunctionOverloading
{internal class Program{static int Add(int num, int value){num += value;return num;}//ref int 可以和 int 構成重載static int Add(ref int num, int value){num += value;return num;}//ref 與 out 不存在重載//static int Add(out int num, int value)//{//    num += value;//    return num;//}static int Add2(out int num, int value){num = 100;num += value;   return num;}// params int[]可以和 int 構成重載static int Add(int num, params int[] values){foreach (int value in values) { num += value;}return num;}//params int[] 不能與 int[] 構成重載//static int Add(int num, int[] values)//{//    foreach(int value in values)//    {//        num += value;//    }//    return num;//}//默認值不構成重載//static int Add(int num , int value = 1)//{//    num += value;//    return num;//}static int Add3(int num, int value = 1){num += value;return num;}static void Main(string[] args){//函數一般寫在類中//一般函數調用,發生值類型參數的復制int num = 1;Add(num, 1);    //調用 Add(int num, int value)Console.WriteLine(num); //1//ref和out//ref//必須初始化,它變我也變//類似C++中的引用,不需要在被調用函數中賦值//ref函數形參不能有默認值int num2 = 1;Add(ref num2, 1);   //調用 Add(ref int num, int value)Console.WriteLine(num2);    //2//out//可以不初始化,它變我也變//需要在被調用函數中賦值//out函數形參不能有默認值int num3 = 2;   //這個賦值沒啥子用,在被調用函數值又會重新賦值Add2(out num3, 2);  //調用 Add2(out int num, int value)Console.WriteLine(num3);    //102//params變長參數//在函數調用時,可以傳入多個相同類型的實參//只能有一個形參為params類型,且必須是最后一個int num4 = Add(0, 1, 2, 3); //調用 Add(int num, params int[] values)Console.WriteLine(num4);    //6//默認參數//可以為多個形參設置默認值,但是有默認值的形參后面所有形參必須都有默認值int num5 = Add3(20);    //調用 Add3(int num, int value = 1)Console.WriteLine(num5);    //21}}
}

7、參考資料

  1. 《唐老獅C#基礎》

本篇結束,感謝您的閱讀~

在這里插入圖片描述

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

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

相關文章

Vue內置指令與自定義指令

一、前言 在 Vue 開發中,指令(Directives) 是一種非常強大的特性,它允許我們以聲明式的方式操作 DOM。Vue 提供了一些常用的內置指令,如 v-if、v-show、v-bind、v-on 等,同時也支持開發者根據需求創建自己…

華為AP6050DN無線接入點瘦模式轉胖模式

引言 華為AP6050DN是一款企業級商用的無線接入點。由于產品定位原因,其默認工作在瘦模式下,即須經AC統一控制和管理,是不能直接充當普通的無線路由器來使用的。 而本文的目的,就是讓其能脫離AC的統一控制和管理,當作普通無線路由器來使用。 硬件準備 華為AP6050DN無線接…

程序員出海之英語-使用手冊

為什么現在實時翻譯工具這么牛逼了,AI轉譯這么準確了,我還在這里跟老古董一樣吭哧吭哧學英語呢? 這是因為我們始終是和人打交道,不僅僅是為了考試,看懂官方文章,聽懂官方視頻。這里為什么說官方&#xff0c…

Java 事務管理:在分布式系統中實現可靠的數據一致性

Java 事務管理:在分布式系統中實現可靠的數據一致性 在當今的軟件開發領域,分布式系統逐漸成為主流架構。然而,這也給事務管理帶來了巨大的挑戰。本文將深入探討 Java 事務管理在分布式系統中的關鍵要點,并通過詳細代碼實例展示如…

微信小程序關于截圖、錄屏攔截

1.安卓 安卓: 在需要禁止的頁面添加 onShow() {if (wx.setVisualEffectOnCapture) {wx.setVisualEffectOnCapture({visualEffect: hidden,complete: function(res) {}})}},// 頁面隱藏和銷毀時需要釋放防截屏錄屏設置onHide() {if (wx.setVisualEffectOnCapture) {w…

使用 PySpark 從 Kafka 讀取數據流并處理為表

使用 PySpark 從 Kafka 讀取數據流并處理為表 下面是一個完整的指南,展示如何通過 PySpark 從 Kafka 消費數據流,并將其處理為可以執行 SQL 查詢的表。 1. 環境準備 確保已安裝: Apache Spark (包含Spark SQL和Spark Streaming)KafkaPySpark對應的Ka…

第十天的嘗試

目錄 一、每日一言 二、練習題 三、效果展示 四、下次題目 五、總結 一、每日一言 哈哈,十天缺了兩天,我寫的文章現在質量不高,所以我可能考慮,應該一星期或者三四天出點高質量的文章,同時很開心大家能夠學到知識&a…

mediapipe標注視頻姿態關鍵點(基礎版加進階版)

前言 手語視頻流的識別有兩種大的分類,一種是直接將視頻輸入進網絡,一種是識別了關鍵點之后再進入網絡。所以這篇文章我就要來講講如何用mediapipe對手語視頻進行關鍵點標注。 代碼 需要直接使用代碼的,我就放這里了。環境自己配置一下吧&…

Redis數據遷移方案及持久化機制詳解

#作者:任少近 文章目錄 前言Redis的持久化機制RDBAOF Redis save和bgsave的區別redis數據遷移redis單機-單機數據遷移redis 主從-主從數據遷移redis 單機-cluster數據遷移redis cluster –redis cluster數據遷移 前言 Redis數據遷移是常見需求,主要包括…

圖論回溯

圖論 200.島嶼數量DFS 給你一個由 ‘1’(陸地)和 ‘0’(水)組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,并且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。此外&#xff…

真實網絡項目中交換機常用的配置與解析

一、配置三層鏈路聚合增加鏈路帶寬 1.組網需求 某企業有多個部門分布在不同的地區,由于業務發展的需要,不同區域的部門與部門之間有進行帶有VLAN Tag的報文的傳輸需求。采用透明網橋的遠程橋接和QinQ功能,可以實現企業在不同區域部門之間進…

【Redis】過期鍵刪除策略,LRU和LFU在redis中的實現,緩存與數據庫雙寫一致性問題,go案例

一、Redis 中的過期鍵刪除策略有哪些? 采用了 惰性刪除 和 定期刪除 兩種策略處理過期鍵: 1. 惰性刪除(Lazy Deletion) 機制:只有在訪問 key 時才檢查是否過期,如果已過期則立刻刪除。優點:對…

為什么單張表索引數量建議控制在 6 個以內

單張表索引數量建議控制在6個以內的主要原因包括以下幾點?: ?性能影響?:索引會占用額外的磁盤空間。如果索引數量過多,會占用大量的磁盤空間,尤其是在數據量較大的情況下,索引占用的空間可能會超過數據本身。此外&…

深度學習實戰109-智能醫療隨訪與健康管理系統:基于Qwen3(32B)、LangChain框架、MCP協議和RAG技術研發

大家好,我是微學AI,今天給大家介紹一下深度學習實戰109-智能醫療隨訪與健康管理系統:基于Qwen3(32B)、LangChain框架、MCP協議和RAG技術研發。在當今醫療信息化快速發展的背景下,醫療隨訪與健康管理面臨著數據分散、信息整合困難、個性化方案生成效率低等挑戰。傳統的醫療隨…

聊一聊 .NET Dump 中的 Linux信號機制

一:背景 1. 講故事 當 .NET程序 在Linux上崩潰時,我們可以配置一些參考拿到對應程序的core文件,拿到core文件后用windbg打開,往往會看到這樣的一句信息 Signal SIGABRT code SI_USER (Sent by kill, sigsend, raise)&#xff0c…

如何在uniapp H5中實現路由守衛

目錄 Vue3 app.config.globalProperties 1. 創建 Vue 應用實例 2. 添加全局屬性或方法 3. 在組件中使用全局屬性或方法 beforeEach在uniapp的注冊 1、在H5中這兩個對象是都存在的。「router:route」但是功能并不全面,具體可參考下圖。 2、剛剛測試了一下,在微信小程序…

無人機降落傘設計要點難點及原理!

一、設計要點 1. 傘體結構與折疊方式 傘體需采用輕量化且高強度的材料(如抗撕裂尼龍或芳綸纖維),并通過多重折疊設計(如三重折疊縫合)減少展開時的阻力,同時增強局部承力區域的強度。 傘衣的幾何參數&am…

AI時代新詞-AI增強現實(AI - Enhanced Reality)

一、什么是AI增強現實(AI - Enhanced Reality)? AI增強現實(AI - Enhanced Reality)是指將人工智能(AI)技術與增強現實(Augmented Reality,簡稱AR)技術相結合…

基于Matlab實現各種光譜數據預處理

在IT領域,尤其是在數據分析和科學研究中,光譜數據的預處理是至關重要的步驟。光譜數據通常包含了豐富的信息,但往往受到噪聲、雜散光、背景信號等因素的影響,需要通過預處理來提取有效信號,提高分析的準確性和可靠性。…

用 commitizen-go 來實現標準化你的Git提交信息 【windows 版】

前言 團隊中有部分人的 commit 信息比較隨意,因此想用工具來進行約束, web 項目可以使用 commitizen 來實現, 但是 golang 又該用什么來約束呢, 在 Github 上找到 commitizen-go 可以做為 commitizen 平替,但該說明文…