| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Структура |
| Автор: kuller 7.7.2008, 18:17 | ||
| Здравствуйте!!! Вобщем мне нужно создать структуру, в которой будет массив на 5 элементов Я делаю вот так:
и он выдает вот аткую вот ошибку: 'n2z328.STUDENT.ocenki': cannot have instance field initializers in structs Подскажите в чем дело. Заранее спасибо. |
| Автор: nikitao 7.7.2008, 18:27 |
| В структурах C# запрещены конструкторы по-умолчанию. А inline инициализация - это вмешательство в работу всех конструкторов , в том числе и конструктора по-умолчанию |
| Автор: kuller 7.7.2008, 18:35 |
| nikitao, Спасибо! уже исправил и все работает) Тема закрыта. |
| Автор: nikitao 7.7.2008, 18:48 |
| Автор: Idsa 7.7.2008, 20:24 |
| У меня, видимо, развивается склероз |
| Автор: PashaPash 7.7.2008, 20:28 |
| Idsa, потому что copies of structs are created and destroyed automatically by the compiler, a default constructor and destructor are unnecessary. In effect, the compiler implements the default constructor by assigning all the fields of their default values. |
| Автор: wotker 7.7.2008, 20:34 |
| Могу добавить, что 1) CLR позволяет создавать дефолтовые конструкторы. 2) каждый конструктор структоры должен явно вызываться (иначе все поля будут инициализироваться дефолтвоми значениями). 3) конструктор должен инициализировать все поля структуры |
| Автор: nikitao 7.7.2008, 20:35 |
| Я на самом деле вообще этой темы не понимаю. Причины это конечно хорошо , но это имхо оч криво выглядит. |
| Автор: wotker 7.7.2008, 20:45 |
| согласен. да еще и на экзаменах приходится все это вспоминать.. |
| Автор: nikitao 7.7.2008, 20:54 |
| Оффтоп ))) Вы структуры свои юзаете ? Я вот привык все в классы фигачить. Я много в производительности или еще в чем то проигрываю ? |
| Автор: wotker 7.7.2008, 21:11 |
| В cpp структуры были оставлены для обратной совместимости. а в dotNet наверное без них подавно можно обойтись =) Хотя не уверен - туп я. |
| Автор: NightmareZ 7.7.2008, 21:32 | ||
Проигрываешь в производительности. Например, для 3D-вектора я использую структуру. |
| Автор: nikitao 7.7.2008, 21:37 |
| Ясно. Когда займусь рефакторингом - учту. Спасибо |
| Автор: PashaPash 7.7.2008, 22:10 |
| Причина в том, что структура - value type. Критерии выбора между ними расписаны в http://msdn.microsoft.com/en-us/library/ms229017.aspx |
| Автор: Idsa 7.7.2008, 22:14 |
Собственно, разница в том, что структура хранится в стеке, а экземпляр класса - в куче. Думаю, о проигрыше можно говорить только при использовании большого числа структур. |
| Автор: kuller 8.7.2008, 09:00 |
| nikitao, мог бы привести пример, как вот из моей структуры сделать класс и как с ним потом работать??? |
| Автор: Partizan 8.7.2008, 10:16 |
| kuller, поменять ключевое слово struct на class |
| Автор: kuller 8.7.2008, 18:36 |
| Partizan, прикольно) мы просто еще классы не проходили ... ну и пока особой потребности не ощущал. |
| Автор: nikitao 8.7.2008, 18:51 |
| Вообще любую структуру можно изменить на класс простой подстановкой class вместо struct , но далеко не наоборот. Ну ты сам увидишь, когда будете изучать ))) |