Документацията на MSDN ви разказва за конкретната реализация, която Microsoft C# компилаторът използва за struct
. Тези конкретни подробности не са в спецификацията на ECMA 334 C#; те не са част от семантиката на struct
s. Следователно тези подробности в документацията са подробности за изпълнението.
Изглежда си спомням, че прочетох някъде Ерик Липерт, който казва, че желае (или предпочита, не помня какво ниво на предпочитание е предоставил) документацията не споменава стека във връзка с struct
s. Ще видя дали мога да го изровя.
Ето го от публикацията в блога, към която сте дали връзка:
Съжалявам, че документацията не се фокусира върху това, което е най-подходящо; като се фокусираме върху до голяма степен неуместна подробност на изпълнението, ние увеличаваме важността на тази подробност на изпълнението и затъмняваме важността на това, което прави даден тип стойност семантично полезен. Много ми се иска всички тези статии, обясняващи какво е „стека“, вместо това да отделят време за обяснение какво точно означава „копирано по стойност“ и как неразбирането или неправилното използване на „копиране по стойност“ може да причини грешки.
Съответният раздел от спецификацията ECMA 334 C# е §11. Имайте предвид, че думата "стек" никога не се използва в този раздел. Разделът просто излага синтаксиса, че struct
s следват семантиката на стойността, че те са имплицитно запечатани и наследяват от System.ValueType
, че присвояването на променлива от тип struct
създава копие, че предаването на struct
като параметър по стойност създава копие, как struct
s са зададени на стойности по подразбиране (всички полета за типове стойности в struct
са зададени на техните стойности по подразбиране и всички полета за референтни типове са зададени на null
), правилата около боксирането и разопаковането на struct
, значението на this
за struct
s и как инициализацията на полето, конструкторите, деструкторите и статичните конструктори работят за struct
s. Отново не се споменават стекове. някога.
Стекът е детайл на изпълнението, а не част от семантиката на struct
.
person
jason
schedule
29.12.2009