返回引用类型的方法是返回引用还是克隆副本?

我这些天一直在学习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美元,他应该买一块漂亮的新手表。 但是,另一个Thread很可能具有对此Employee对象的引用。 这意味着他们也可以访问Salary属性,并且可以在if块运行之前将工资总额更改为$ 100,000以上。

在这个尴尬的场景中,即使Raise()方法只调用一次,员工也会获得升级和新办公室。

傻我知道,但certificate了这一点。