如何在C#7.2中强制执行ref readonly的readonlyness?

时间:2017-12-09 15:28:34

标签: c# c#-7.2

我想写一个方法返回ref ref ref readonly as described:"该功能允许成员通过引用返回变量,而不会将它们暴露给突变。&#34 ;

不幸的是,我的代码会编译并执行此类突变。如何确保无法修改?这是有充分理由的。我期待编译器错误。我还应该做些什么吗? 200被修改为201.我不希望这样。

internal class TryClass
{
    private static int _result = 0;

    public static ref readonly int Multiply(int a, int b)
    {
        _result = a * b;
        return ref _result;
    }
}

internal class Program
{
    private static void Main(string[] args)
    {
        int x = 10;
        int y = 20;
        var rez = TryClass.Multiply(x, y);
        rez++;
        Console.WriteLine(rez);
        Console.ReadLine();
    }
}

1 个答案:

答案 0 :(得分:2)

根据评论。这是解决方案。我得到了我期望的编译器错误:“严重性代码描述项目文件行抑制状态 错误CS8329无法使用方法'TryClass.Multiply(int,int)'作为ref或out值,因为它是一个只读变量“

internal class Program
{
    private static void Main(string[] args)
    {
        int x = 10;
        int y = 20;
        ref readonly var rez = ref TryClass.Multiply(x, y);
        rez++;
        Console.WriteLine(rez);
        TryClass.DoAfter();
        Console.ReadLine();
    }
}