C#新field关键字:调用Volatile.Read(ref field)能否实现volatile属性?
C#中实现“volatile属性”的可行性探讨
传统上,C#不允许直接给属性使用volatile关键字,比如下面的写法会触发编译错误:
// CS0106: The modifier 'volatile' is not valid for this item public volatile int SomeNumber { get; set; }
当然,你完全可以手动创建一个volatile修饰的字段作为属性的后备字段——毕竟volatile关键字只能用于字段,示例如下:
public volatile int SomeNumber;
不过C# 14即将引入的field关键字,允许我们访问自动实现属性时生成的后备字段,用法示例:
public int SomeNumber { get { return field; } }
这就让人产生疑问:能不能通过在读取field前调用Thread.MemoryBarrier()来实现类似volatile属性的效果?换句话说,下面的代码在功能上是否等价于volatile字段?
public int SomeNumber { get { Thread.MemoryBarrier(); return field; } }
或者更简洁的写法:
public int SomeNumber => Volatile.Read(ref field);
内容的提问来源于stack exchange,提问作者user3163495
相关产品推荐
相关产品推荐

