您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

引用就是……对存储在内存中的某个对象的引用。除非您明确编写代码以创建克隆并返回对该对象 的引用 ,否则您将始终绕过对同一实例的引用。

它试图避免您遇到的情况是将对象引用移交给您所依赖的调用方。您无法控制谁或什么改变了该对象的状态,因此您的类可能会以不可预测的结果结束。

一个愚蠢的例子:

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()方法只被调用一次,该员工也将获得升职和新办公室。

我知道这很傻,但是可以说明这一点。

其他 2022/1/1 18:27:17 有455人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶