Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Структура


Автор: kuller 7.7.2008, 18:17
Здравствуйте!!!
Вобщем мне нужно создать структуру, в которой будет массив на 5 элементов

Я делаю вот так:
Код

 struct STUDENT
    {
        public string NAME;
        public int GROUP;
        public int[] ocenki = new int [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
smile удачи

Автор: Idsa 7.7.2008, 20:24
У меня, видимо, развивается склероз smile Напомните, по каким соображениям у структур запрещены конструкторы по умолчанию.

Автор: 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 наверное без них подавно можно обойтись =)  Хотя не уверен - туп я. smile 

Автор: NightmareZ 7.7.2008, 21:32
Цитата(nikitao @ 7.7.2008,  20:54)
Оффтоп )))

Вы структуры свои юзаете ? Я вот привык все в классы фигачить. Я много в производительности или еще в чем то проигрываю ?

Проигрываешь в производительности.
Например, для 3D-вектора я использую структуру.

Автор: nikitao 7.7.2008, 21:37
Ясно. Когда займусь рефакторингом  - учту. Спасибо smile 

Автор: PashaPash 7.7.2008, 22:10
Цитата(nikitao @  7.7.2008,  20:35 Найти цитируемый пост)
Я на самом деле вообще этой темы не понимаю. Причины это конечно хорошо , но это имхо оч криво выглядит. 
Причина в том, что структура - value type. Критерии выбора между ними расписаны в http://msdn.microsoft.com/en-us/library/ms229017.aspx

Автор: Idsa 7.7.2008, 22:14
Цитата(NightmareZ @  8.7.2008,  01:32 Найти цитируемый пост)
Проигрываешь в производительности.

Собственно, разница в том, что структура хранится в стеке, а экземпляр класса - в куче.
Думаю, о проигрыше можно говорить только при использовании большого числа структур.

Автор: kuller 8.7.2008, 09:00
nikitao, мог бы привести пример, как вот из моей структуры сделать класс и как с ним  потом работать???

Автор: Partizan 8.7.2008, 10:16
kuller, поменять ключевое слово struct на class  smile 

Автор: kuller 8.7.2008, 18:36
Partizan, прикольно)
мы просто еще классы не проходили ... ну и пока особой потребности не ощущал.

Автор: nikitao 8.7.2008, 18:51
Вообще любую структуру можно изменить на класс простой подстановкой class вместо struct , но далеко не наоборот. Ну ты сам увидишь, когда будете изучать )))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)