不能在 C# 中编译 volatile 属性,或者是吗?

Yeg*_*ker 0 c#

我正在尝试编译以下代码:

internal volatile bool isRunning { get; set; }    
Run Code Online (Sandbox Code Playgroud)

但是编译失败并显示错误消息,例如:“volatile 修饰符对该元素无效”。但是下面的代码会被很好地编译:

internal volatile bool _isRunning;

internal bool isRunning{
    get { return _isRunning; }
    set { _isRunning = value; }
}
Run Code Online (Sandbox Code Playgroud)

两个代码片段有什么区别??

Hab*_*bib 5

易失性(C# 参考)

volatile 关键字只能应用于类或结构的字段。局部变量不能声明为 volatile。

如果是自动实现的属性或属性,编译器会创建一个可以通过 get/set 访问的私有支持字段。字段可以标记为volatile,但在自动实现属性的情况下,您没有明确定义字段,因此不能将其标记为 volatile。这就是您的第一个代码 ( internal volatile bool isRunning { get; set; }) 片段无法编译的原因。

如果是第二个代码片段

internal volatile bool _isRunning;

internal bool isRunning{
    get { return _isRunning; }
    set { _isRunning = value; }
}
Run Code Online (Sandbox Code Playgroud)

您正在通过您的财产封装_isRunning 字段isRunning。该字段_isRunning可以标记为volatile

  • 是的。所以区别在于:第一个版本不是 Csharp - 至少不是任何编译器。 (2认同)