當前位置:網站首頁>C#:in、out、ref關鍵字
C#:in、out、ref關鍵字
2022-07-23 13:51:42【qq_42987967】
一、in關鍵字
in 關鍵字會導致按引用傳遞參數,但確保未修改參數。 它讓形參成為實參的別名,這必須是變量。從C++角度來說,in關鍵字有點類似於const T&
1.in修飾值類型
1)當in修飾基本數據類型時,我們無法修改基本數據類型的值,只能讀取。
void SetValue(in int i)
{
i = 4;//報錯
}2) 當修飾struct數據類型的時候也是只能讀取。
public struct ValueType
{
public int i;
public void Set()
{
i = 1;
}
}
public class ReadOnlyTest : MonoBehaviour
{
ValueType valueType = new ValueType();
void Seti2(in ValueType valtype)
{
valtype.i = 4;//報錯
}
}
2.in修飾引用類型
引用類型就比較靈活了,其是可以修改引用類型的成員變量的值的。
public class RefType
{
public int i = 0;
}
public class ReadOnlyTest : MonoBehaviour
{
RefType refType = new RefType();
void Seti1(RefType reftype)
{
reftype.i = 4;//可以正常修改
}
}3.在函數中使用in關鍵字可以算是重載的。
void SetValue(in int i)
{
Debug.Log(i);
}
void SetValue(int i)
{
Debug.Log(i);
}
void Start()
{
SetValue(i);
SetValue(in i);
}該部分參考自:in 參數修飾符 - C# 參考 | Microsoft Docs
二、out關鍵字
out關鍵字跟in很像,基本像是一對。不過對out關鍵字來說其不僅可以讀取,還能被賦值,同時也必須被賦值。
void SetValue(out int i)
{
i = 9;
int k=i;
}
void Start()
{
int i = 0;
SetValue(out i);
Debug.Log(i);//將打印9
}三、ref關鍵字
1.官方的提示
1) 在某些情况下,按引用訪問值可避免潜在的高開銷複制操作,從而提高性能。
2)不要混淆通過引用傳遞的概念與引用類型的概念。 這兩種概念是不同的。 無論方法參數是值類型還是引用類型,均可由 ref 修改。 當通過引用傳遞時,不會對值類型裝箱。
2.ref修飾值類型
ref主要對值類型會有較大的影響,其修飾函數形參與in和out沒有很大區別。
但是比較有趣的是其可以直接修飾變量。這真就跟C++的左值引用一模一樣了。
void Start()
{
int i = 0;
ref int k = ref i;
k = 3;
Debug.Log(i);//i=3
}並且還可以跟readonly關鍵字一起使用
void Start()
{
int i = 0;
ref readonly int k = ref i;
k = 3;//只可讀,不可賦值,報錯
Debug.Log(i);
}3.ref、in、out關鍵字的區別
1)傳遞到 ref 或 in 形參的實參必須先經過初始化,然後才能傳遞。 該要求與 out 形參不同,在傳遞之前,不需要顯式初始化該形參的實參。
版權聲明
本文為[qq_42987967]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/204/202207230718560705.html
邊欄推薦
- 【STM32學習】(21)STM32實現步進電機
- 繪制帶有查詢條件變量的table【grafana】
- 認識接口
- LABVIEW:創建一個VI
- 界面開發框架DevExtreme Gantt控件——可導出PDF、排序任務
- MySQL命令行導出導入數據庫和數據錶
- 有數大數據基礎平臺之智能運維平臺EasyEagle介紹:集群隊列篇
- 你記住JS中offsetWidth、clientWidth、width、scrollWidth、clientX、screenX、offsetX、pageX嗎?
- 【Azure 事件中心】Azure Event Hub 新功能嘗試 -- 异地灾難恢複 (Geo-Disaster Recovery)
- unity 照片牆
猜你喜歡
隨機推薦
- *精度優化*優化策略1:網絡+SAM優化器
- AXI協議詳解
- js--Date對象&三元錶達式
- leetcode-買賣股票的最佳時機含手續費
- unity中3dUI或者模型始終面向攝像機,跟隨攝像機視角旋轉丨視角跟隨丨固定視角
- JVM初探
- 移動端測試之appium環境部署【未完待續】
- 關於後臺掛載,進程管理的學習
- 讀《高效閱讀法-最劃算的自我投資》有感
- shell基本命令
- 從鍵盤輸入一串字符,輸出不同的字符以及每個字符出現的次數。(輸出不按照順序)運用String類的常用方法解題
- 2019_AAAI_ICCN
- 影響接口查詢速度的情况
- 《STL適配器》stack和queue
- 淺析緩存的讀寫策略
- 類和對象(1)
- 實驗二 YUV
- 大咖訪談 | 開源社區裏各種奇怪的現狀——夜天之書陳梓立tison
- synchronized是如何實現的
- 【arXiv2022】GroupTransNet: Group Transformer Network for RGB-D Salient Object Detection
- BGP機房的優點
- 真人踩過的坑,告訴你避免自動化測試常犯的10個錯誤
- 判斷是否為void類型
- C語言——幾道C語言經典習題
- openvino_datawhale
- C語言基礎知識梳理(一)
- Redis源碼與設計剖析 -- 7.快速列錶
- 比特,比特,字節,字的概念與區別
- 項目部署(簡版)
- JDBC的學習以及簡單封裝
- [pytho-flask筆記5]藍圖簡單使用
- Web Component-自定義元素的生命周期
- 數倉4.0筆記——業務數據采集
- 數倉4.0筆記——用戶行為數據采集四
- 對.h5文件的迭代顯示,h5py數據操作
- 常用數學知識匯總
- “東數西算”下數據中心的液冷GPU服務器如何發展?
- 硬件知識1--原理圖和接口類型(基於百問網硬件操作大全視頻教程)
- 鋼結構基本原理複習
- Unity3d:UGUI源碼,Rebuild優化