我正在尝试编译以下代码:
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)
两个代码片段有什么区别??
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。