Почему тип `System.Nullable <T>` имеет атрибут `StructLayout (LayoutKind.Sequential)`? - PullRequest
1 голос
/ 08 февраля 2020

Почему тип System.Nullable<T> имеет атрибут StructLayout(LayoutKind.Sequential)?

Я нашел следующий фрагмент текста и кода в CLR через C# книгу:

Вот логическое представление того, как определяется тип System.Nullable:

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

Итак, почему для System.Nullable<T> логично иметь StructLayout(LayoutKind.Sequential) атрибут применяется? Я считаю, что было бы достаточно ответить на мой вопрос, если бы кто-то просто объяснил, для какого случая (или случаев) был добавлен атрибут (то есть, для какой цели он служит).

Я понимаю, что делает атрибут. Я не понимаю, зачем нужен атрибут для типа System.Nullable<T>.

1 Ответ

1 голос
/ 08 февраля 2020

У него фактически нет этого атрибута. Если раньше, когда книга была написана, это уже не так.

Вы можете убедиться в этом сами. NET Framework (источник здесь ):

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

и для. NET Core (источник здесь ):

    [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
    {
...