пятница, 25 января 2013 г.

Отличия структуры от класса C#.

Тем кто усиленно изучал C++,  может показаться не обычным то что, структура таки отличается от класса, меня это например удивило, и я даже один раз ошибся.
Сейчас попробую описать главные отличия.
  • Структура не может наследовать другой класс или структуру (интерфейс можно).
  • Структуру нельзя унаследовать.
  • Если объявить переменную с типом структуры, то там будет хранится структура. а не ссылка на неё, как в случае с классом. 
  • Все члены структуры по умолчанию public. 
  • Члены структуры не могут быть protected. 
  • Структура не содержит деструктора.   
 Не много расскажу о третьем пункте. Многие не поймут разница. К примеру рассмотрим такой вот пример.


struct tempStruct
{
   public int i;
}
class tempClass
{
   public int i;
}

tempClass tc = new tempClass();
tempClass tc2 = new tempClass();
tempStruct ts;
tempStruct ts2;
tc = tc2;
tc2.i = 10;
ts.i = 10;
ts2 = ts;
ts2.i = 20;


в результате 

tc.i == 10;
tc2.i == 10;
ts.i == 10;
ts2.i == 20;

При работе с классами, у нас передаются ссылки по переменным. А в случаи со структурами они полностью копируются. Так же, при работе с unsafe кодом, указатели могу ссылаться на структуру при условие что в ней нету ссылочных значений. С классами указатели работать не могут, только с их полями.



Комментариев нет:

Отправить комментарий