挥发性可以';不要用C#编译,也不要做它们
本文关键字:编译 挥发性 | 更新日期: 2023-09-27 18:27:52
我正在尝试编译以下代码:
internal volatile bool isRunning { get; set; }
但编译失败,错误消息如下:"volatile修饰符对该元素无效"。但是以下代码将被编译为正确的:
internal volatile bool _isRunning;
internal bool isRunning{
get { return _isRunning; }
set { _isRunning = value; }
}
两个代码段之间有什么区别??
易失性(C#参考)
volatile关键字只能应用于类的字段或结构。局部变量不能声明为volatile。
对于Auto实现的属性或某个属性,编译器会创建一个可以通过get/set访问的专用支持字段。字段可以标记为volatile
,但在Auto实现属性的情况下,您不会显式定义字段,因此无法将其标记为volatile。这就是为什么您的第一个代码(internal volatile bool isRunning { get; set; }
)片段没有编译的原因。
如果是第二个代码片段
internal volatile bool _isRunning;
internal bool isRunning{
get { return _isRunning; }
set { _isRunning = value; }
}
您正在通过属性isRunning
封装_isRunning
字段。字段_isRunning
可以标记为volatile
。
一个带有getter和setter的属性实际上可以编译成C#中的方法。
internal volatile bool isRunning { get; }
想要
internal volatile bool getIsRunning()
{
// Do something
}
该方法实际上没有存储任何内容,而私有成员是。