當前位置:網站首頁>C#:in、out、ref關鍵字

C#:in、out、ref關鍵字

2022-07-23 13:51:42qq_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 形參不同,在傳遞之前,不需要顯式初始化該形參的實參。

該部分參考自:ref 關鍵字 - C# 參考 | Microsoft Docs

版權聲明
本文為[qq_42987967]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/204/202207230718560705.html

隨機推薦