日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

ref(C# 参考)

發(fā)布時間:2023/12/19 综合教程 35 生活家
生活随笔 收集整理的這篇文章主要介紹了 ref(C# 参考) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ref關(guān)鍵字通過引用(而非值)傳遞參數(shù)。通過引用傳遞的效果是,對所調(diào)用方法中的參數(shù)進(jìn)行的任何更改都反映在調(diào)用方法中。例如,如果調(diào)用方傳遞本地變量表達(dá)式或數(shù)組元素訪問表達(dá)式,所調(diào)用方法會將對象替換為 ref 參數(shù)引用的對象,然后調(diào)用方的本地變量或數(shù)組元素將開始引用新對象。

注意

不要混淆通過引用傳遞的概念與引用類型的概念。這兩種概念是不同的。無論方法參數(shù)是值類型還是引用類型,均可由ref修改。當(dāng)通過引用傳遞時,不會對值類型裝箱。

若要使用ref參數(shù),方法定義和調(diào)用方法均必須顯式使用ref關(guān)鍵字,如下面的示例所示。

C#

class RefExample
{
    static void Method(ref int i)
    {
        // Rest the mouse pointer over i to verify that it is an int.
        // The following statement would cause a compiler error if i
        // were boxed as an object.
        i = i + 44;
    }

    static void Main()
    {
        int val = 1;
        Method(ref val);
        Console.WriteLine(val);

        // Output: 45
    }
}

傳遞到ref形參的實(shí)參必須先經(jīng)過初始化,然后才能傳遞。這與out形參不同,在傳遞之前,不需要顯式初始化該形參的實(shí)參。有關(guān)詳細(xì)信息,請參閱out。

類的成員不能具有僅在refout方面不同的簽名。如果類型的兩個成員之間的唯一區(qū)別在于其中一個具有ref參數(shù),而另一個具有out參數(shù),則會發(fā)生編譯錯誤。例如,以下代碼將不會編譯。

C#

class CS0663_Example
{
    // Compiler error CS0663: "Cannot define overloaded 
    // methods that differ only on ref and out".
    public void SampleMethod(out int i) { }
    public void SampleMethod(ref int i) { }
}

但是,當(dāng)一個方法具有refout參數(shù),另一個方法具有值參數(shù)時,則可以完成重載,如下面的示例所示。

C#

class RefOverloadExample
{
    public void SampleMethod(int i) { }
    public void SampleMethod(ref int i) { }
}

在其他要求簽名匹配的情況下(如隱藏或重寫),refout是簽名的一部分,相互之間不匹配。

屬性不是變量。它們是方法,不能傳遞到ref參數(shù)。

有關(guān)如何傳遞數(shù)組的信息,請參閱使用 ref 和 out 傳遞數(shù)組(C# 編程指南)。

你不能將refout關(guān)鍵字用于以下幾種方法:

異步方法,通過使用async修飾符定義。

迭代器方法,包括yield return或yield break語句。

前面的示例演示當(dāng)通過引用傳遞值類型時會發(fā)生什么情況。你還可以使用ref關(guān)鍵字傳遞引用類型。通過引用傳遞引用類型可以使所調(diào)用方法將調(diào)用方法中的對象替換為引用參數(shù)所引用的對象。對象的存儲位置按引用參數(shù)的值傳遞到方法。如果更改參數(shù)存儲位置中的值(以指向新對象),你還可以將存儲位置更改為調(diào)用方所引用的位置。下面的示例將引用類型的實(shí)例作為ref參數(shù)傳遞。有關(guān)如何通過值和引用傳遞引用類型的詳細(xì)信息,請參閱傳遞引用類型參數(shù)(C# 編程指南)。

C#

class RefExample2
{
    static void ChangeByReference(ref Product itemRef)
    {
        // The following line changes the address that is stored in  
        // parameter itemRef. Because itemRef is a ref parameter, the
        // address that is stored in variable item in Main also is changed.
        itemRef = new Product("Stapler", 99999);

        // You can change the value of one of the properties of
        // itemRef. The change happens to item in Main as well.
        itemRef.ItemID = 12345;
    }

    static void Main()
    {
        // Declare an instance of Product and display its initial values.
        Product item = new Product("Fasteners", 54321);
        System.Console.WriteLine("Original values in Main.  Name: {0}, ID: {1}
",
            item.ItemName, item.ItemID);

        // Send item to ChangeByReference as a ref argument.
        ChangeByReference(ref item);
        System.Console.WriteLine("Back in Main.  Name: {0}, ID: {1}
",
            item.ItemName, item.ItemID);
    }
}

class Product
{
    public Product(string name, int newID)
    {
        ItemName = name;
        ItemID = newID;
    }

    public string ItemName { get; set; }
    public int ItemID { get; set; }
}

// Output: 
//Original values in Main.  Name: Fasteners, ID: 54321

//Back in Main.  Name: Stapler, ID: 12345

總結(jié)

以上是生活随笔為你收集整理的ref(C# 参考)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。