首页 > 解决方案 > 引用类类型的只读属性

问题描述

我正在尝试创建一个只读属性(c# 7.2 功能)。

public class JobStatus
{
    public int Id { get; set; }
}

public class Job
{
    public ref readonly JobStatus Status => ref _jobStatus;
    private readonly JobStatus _jobStatus = new JobStatus
    {
        Id = 4
    };
}

class Program
{
    static void Main(string[] args)
    {
        var job = new Job();
        job.Status.Id = 5;
    }
}

此代码编译成功。我预计会出现某种错误,我正在尝试更新只读属性的字段。我是否错误地使用了 ref readonly返回功能?

标签: c#.netc#-7.3

解决方案


根据我在本文中的发现,您应该将其理解为以下内容

将参数标记为“readonly ref”或“in”不会使其引用的值不可变。虽然声明参数的函数不能对其进行更改,但可以在其他地方更改该值。这不需要多线程,只是一种访问参数引用的原始变量的方法。

因此,由于您的课程不是一成不变的,因此可以在其他地方进行更改。此功能似乎主要与传递参考值的性能有关


推荐阅读