【问题标题】:Why does the `System.Nullable<T>` type has the `StructLayout(LayoutKind.Sequential)` attribute?为什么 `System.Nullable<T>` 类型有 `StructLayout(LayoutKind.Sequential)` 属性?
【发布时间】:2020-02-08 13:34:27
【问题描述】:

为什么System.Nullable&lt;T&gt; 类型有StructLayout(LayoutKind.Sequential) 属性?

我在 CLR via C# 一书中找到了以下文本和代码:

这是 System.Nullable 类型的逻辑表示 已定义:

[Serializable, StructLayout(LayoutKind.Sequential)]
public struct Nullable<T> where T : struct { 
   //... unrelated to the question code
}

那么,为什么 System.Nullable&lt;T&gt; 应用 StructLayout(LayoutKind.Sequential) 属性是合乎逻辑的?我相信,如果有人仅仅解释添加属性的情况(即,它的用途是什么),就足以回答我的问题。

我了解该属性的作用。我不明白为什么必须有System.Nullable&lt;T&gt; 类型的属性。

【问题讨论】:

    标签: c# clr nullable custom-attributes


    【解决方案1】:

    它实际上没有那个属性。如果这本书写的时候是这样,现在就不是了。

    您可以自己查看 .NET Framework(来源 here):

        [Serializable]
        [System.Runtime.Versioning.NonVersionable] // This only applies to field layout
        public struct Nullable<T> where T : struct
        {
    

    对于 .NET Core(来源 here):

        [Serializable]
        [NonVersionable] // This only applies to field layout
        [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
        public partial struct Nullable<T> where T : struct
        {
    

    【讨论】:

      猜你喜欢
      • 2018-10-03
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 2012-07-04
      • 2021-07-29
      • 2010-09-22
      • 1970-01-01
      • 2017-06-14
      相关资源
      最近更新 更多