C#volatile和Nullable

Ter*_*ver 10 c#

根据文档:http://msdn.microsoft.com/en-us/library/x13ttww7.aspx:

volatile关键字可以应用于引用类型.

那么为什么在Nullable<T>...参考类型上使用是非法的!

请注意,我实际上并不需要在Nullable<T>字段上使用volatile语义,我偶然遇到了这个错误并且只是好奇.

Jon*_*eet 14

Nullable<T>不是参考类型.这是一种价值类型:

public struct Nullable<T>
where T : struct, new()
Run Code Online (Sandbox Code Playgroud)

注意struct部分.

只是因为它有一个null值不会使它成为引用类型...它是一个可以为null的类型.有关详细信息,请参阅C#4语言规范的4.1.10节.

  • @Tergiver:你误解了'null`.`Nullable <T>`非常肯定*是*值类型,但是`null`并不意味着你认为它意味着什么.`null`文字可转换为"任何可空类型的空值" - 引用类型的null*引用*,或者对于可空值类型,`HasValue`属性为false的值. (3认同)
  • @Tergiver:不,我在每个*级别讲话.`Nullable <T>`*是*值类型,简单明了.它与"Guid"一样具有价值类型.如果您将其视为参考类型,则*会误解它. (2认同)
  • @Tergiver:将它存储为32位值*和*单个位...它们作为值存储在一起,其方式与多个字段封装在其他值类型中的方式相同.可空值类型变量的值是*not*a reference,它是关于该值的所有信息.当您使用赋值运算符时,它会创建值和"这是一个实数值"布尔值的副本.它不仅仅是一种语言功能 - 它需要语言,框架*和*CLR的支持.即使在实现*中,它也是一种价值类型*. (2认同)