volatile属性不能用C#编译或者是吗?

时间:2014-10-24 13:11:45

标签: c#

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

internal volatile bool isRunning { get; set; }    

但是编译失败了,错误信息如下:" volatile修饰符 对该元素无效"。但是下面的代码将被编译好:

internal volatile bool _isRunning;

internal bool isRunning{
    get { return _isRunning; }
    set { _isRunning = value; }
}

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

2 个答案:

答案 0 :(得分:4)

volatile (C# Reference)

  

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
}

该方法实际上并不存储任何内容,而私有成员是。