Какво е различното в структура от класа на

NET поддържа два вида типа: за размер (стойност) и препратката (справка). Тип на променливата стойност съдържа директно данни и референтни променливите на съдържат препратка към зоната на паметта, която съдържа данни. В този случай, паметта за референтните променливи са винаги алокира и паметта за измерение, обикновено в стека. Както е известно, в .NET да освободи неизползвана памет в купчината използва от колектор боклук. Отличителна черта на стека е, че споменът за нея се освобождава автоматично (без никакви административни разходи). По този начин, унищожаване на референтни обекти чрез събиране на боклука е по-малко ефективно от величината.







Сега, обратно на нашия въпрос. За разлика от структурата на класа в .NET:

Няма значение, ако не мога да си спомня всичко различно. Основното, което да се запомни и да разберат основните:
1 - ефект от това е, че обект от класа на купчина, а структурите са обикновено (но не винаги) в стека
3 - Това трябва да е очевидно
4 е резултат от 6, като поле инициализация код е имплицитно поставена във всички дизайнери
6 е резултат от оптимизиране на използването на структури за ускоряване
Особености 8 и 9 за структурите обсъдени по-долу по-подробно, защото то е, че те искали да се съсредоточи върху интервюто.

Разгледаме следния пример:

А сега да разгледаме нюансите, свързани с опаковането и разпакетирате. Както е известно, размерите видове може да наследи от интерфейси (интерфейси implimentirovat). Хората често питат дали опаковката е произведена от типа задействане на стойност към интерфейса. Правилният отговор е - да, има, тъй като интерфейс е препратка тип.
Разгледаме следния пример:

Стойност Int implimentiruet интерфейс IFormattable, съдържащ метод ToString (). От ToString () метод е част от клас вътр и компилаторът знае, че този тип стойност, а оттам и на виртуална ToString () метод не може да се замени (тип т.к. структура е запечатана), компилаторът вмъква директно извикване на метод в низ 2 и опаковане се извършва. В съответствие 3 на опаковката се случва, защото аз намалена до IFormattable интерфейс. Сега вие сами може да каже какво се случва линия 4: имплицитно оттенък IFormattable на интерфейса и се обадете на ToString (метод), който също води до пакета.







И още нещо. Масивите са референтни типове, но могат да съдържат измерение. Когато тя също ще бъде поставен, например, масив от цели числа? В купчината, числата са неопаковани.

тази стойност. За този клас:

Структурата не може да бъде нула, а сега това няма да стане:

ако (и == нула). // съставят време грешка, където S - структура

Структурата не е възможно да се използват с оператора, както е

Директни NO = S като преки; // грешка време на компилация, където Direct - структура

Структурата не е възможно да се използва за заключване на оператор

заключване (и) съставят // време грешка, където S - структура

Не може да има летливи полета тип (летлив дума показва, че полето може да бъде променена в няколко теми, изпълняващи се едновременно.)

частен летлив Direct област; // грешка време на компилация, където Direct - структура

Само struktru може да работи с указатели, примери

(Keyword опасен означава опасно контекст е необходимо да се работи с указатели).

Директен променлива = нов Direct ();

опасен <
Директен * КОП = променлива; // компилира ОК
//.
>

Непряко променлива = нов Непряко ();

структурата може да използва само sizeof

размер Int = sizeof (Директно); // компилира ОК

Тя работи по различен начин за сравняване Резултат

структура Direct
<
обществен Direct (инт стойност)
<
област = стойност;
>
частен поле вътр;
>

клас Индиректен
<
обществен Индиректен (инт стойност)
<
област = стойност;
>
частен поле вътр;
>

клас EqualsBehavior
<
статично невалидни Main ()
<
Директен s1 = нов Direct (42);
Директен s2 = нов Direct (42);

Непряко c1 = нов Непряко (42);
Непряко с2 = нов Непряко (42);

BOOL structEquality = s1. Равно (S2); // вярно
BOOL classIdentity = С1. Резултат (с2); // фалшив

Що се отнася до не-защитен код (опасно, sizeof и т.н.), данните са, работещи с тези методи не трябва да се оразмеряват само вид, но не съдържат референтните типове (т.е. референтни области те не трябва да се те трябва да бъдат нагоре и надолу по структурата)