Когда тип значения может содержать ссылочный тип?

Я понимаю, что решение об использовании типа значения вместо ссылочного типа должно основываться на семантике, а не на производительности. Я не понимаю, почему типы значений могут законно содержать члены ссылочного типа? Это происходит по нескольким причинам.:

Во-первых, мы не должны создавать структуру, требующую конструктора.

public struct MyStruct
{
    public Person p;
    // public Person p = new Person(); // error: cannot have instance field initializers in structs

    MyStruct(Person p)
    {
        p = new Person();
    }
}

Во-вторых, из-за семантики типов значений:

MyStruct someVariable;
someVariable.p.Age = 2; // NullReferenceException

компилятор не позволяет мне инициализировать Personпри объявлении. Я должен переместить это в конструктор, положиться на вызывающую сторону или ожидать NullReferenceException. Ни одна из этих ситуаций не является идеальной.

Есть ли в.NET Framework примеры ссылочных типов внутри типов значений? Когда мы должны это сделать (и вообще )?

17
задан stakx supports GoFundMonica 28 November 2014 в 21:22
поделиться