[英]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.