簡體   English   中英

返回引用類型的方法是否返回引用或克隆副本?

[英]Do methods which return Reference Types return references or cloned copy?

這些天來我一直在學習Java,而我讀到的只是"Be careful not to write accessor methods that return references to mutable objects" ,這確實很有趣。 現在,我想知道C#中的Properties和Accessor方法是否相同? 還是C#已經自動返回克隆的副本?

謝謝。

引用就是……對存儲在內存中的某個對象的引用。 除非您明確編寫代碼以創建克隆並返回對該對象的引用 ,否則您將始終繞過對同一實例的引用。

它試圖避免您遇到的情況是將對象引用移交給您所依賴的調用方。 您無法控制誰或什么改變了該對象的狀態,因此您的類可能會以不可預測的結果結束。

一個愚蠢的例子:

public class Employee
{
    public Salary Salary {get; set;}

    public void GiveRaise()
    {
        Salary.Total *= .25;

        if(Salary.Total > 100000)
        {
            Promote();
            GiveBiggerOffice();
        }
        else
        {
            GiveWatch();
        }
    }
}

因此,可以說這個家伙的薪水為$ 50,000,但剛剛加薪。 現在他的薪水是62,500美元,他應該會得到一塊不錯的新表。 但是,另一個線程很可能對此Employee對象進行了引用。 這意味着他們還可以使用Salary屬性,並且可以在if塊運行之前將薪金總額更改為$ 100,000以上。

在這種尷尬的情況下,即使Raise()方法僅被調用一次,該員工也將獲得升職和新辦公室。

我知道這很傻,但是可以說明這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM