我正在尝试编译以下代码:
internal volatile bool isRunning { get; set; }
但是编译失败了,错误信息如下:" volatile修饰符 对该元素无效"。但是下面的代码将被编译好:
internal volatile bool _isRunning;
internal bool isRunning{
get { return _isRunning; }
set { _isRunning = value; }
}
两个代码片段有什么区别??
答案 0 :(得分:4)
volatile关键字只能应用于某个类的字段 结构。局部变量不能声明为volatile。
我是Auto-implemented property或属性的情况,编译器创建一个可以通过get / set访问的私有支持字段。字段可以标记为volatile
,但是在自动实现属性的情况下,您不能明确定义字段,因此无法将其标记为易失性。这就是您的第一个代码(internal volatile bool isRunning { get; set; }
)代码段无法编译的原因。
如果是第二个代码段
internal volatile bool _isRunning;
internal bool isRunning{
get { return _isRunning; }
set { _isRunning = value; }
}
您正在通过您的媒体资源_isRunning
封装isRunning
字段。字段_isRunning
可以标记为volatile
。
答案 1 :(得分:0)
具有getter和setter的属性实际上编译为C#中的方法。
internal volatile bool isRunning { get; }
就像拥有
internal volatile bool getIsRunning()
{
// Do something
}
该方法实际上并不存储任何内容,而私有成员是。