Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086

Декларация структуры без NEW

25.02.2014, 15:26. Показов 4191. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
public struct parseLine
    {
        private string str;
        public string Str
        {
            get { return str; }
            set { str = value; }
        }
    }
C#
1
2
3
4
5
6
7
8
9
 class Program
    {
        static void Main(string[] args)
        {
            string str = "123";
            parseLine k1;
            k1.Str = str;
        }
    }
Использование локальной переменной "k1", которой не присвоено значение с какого перепуга?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.02.2014, 15:26
Ответы с готовыми решениями:

Моя декларация
Задекларировал вот так: Type TAudioTypes = (atWave,atMp3,atOgg,atMidi); AudioF:arrayof pChar =...

Декларация о НДС
Возникла такая проблема. Изменилась форма регламентированного отчёта Декларация о НДС. Если товар был приобретён за наличные (по чеку), то...

декларация в классе
я хочу в класс добавить указатель на другой класс и получаю следующую ошибку: product.h:20: error: ISO C++ forbids declaration of...

13
26 / 26 / 10
Регистрация: 22.12.2013
Сообщений: 153
25.02.2014, 15:30
у меня код отработал
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
25.02.2014, 15:32
Так ей и не присвоено значение, имя определено, память не выделена. Поля устанавливаются в свои значения по-умолчанию по вызову конструктора.
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
25.02.2014, 15:34  [ТС]
паха76, у меня в 10 студии не фига не компилируется , выдает ошибку

если делать так то все нормально отрабатывает
C#
1
parseLine k = new parseLine();
в чем может быть косяк?
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
25.02.2014, 15:34
Цитата Сообщение от паха76 Посмотреть сообщение
у меня код отработал
У меня нет. Ошибка та же.

Добавлено через 29 секунд
Цитата Сообщение от EVG-1980 Посмотреть сообщение
в чем может быть косяк?
Вы пост выше читали?
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
25.02.2014, 15:35  [ТС]
tezaurismosis,

уникальная возможность структур создание объектов без использования оператора new.

http://msdn.microsoft.com/ru-r... ef578.aspx

Она сама по умолчанию должна выставить нули у полей
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
25.02.2014, 15:38
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Из вашего источника
При создании объекта структуры с помощью оператора new объект создается и вызывается соответствующий конструктор. В отличие от классов структуры можно создавать без использования оператора new. В таком случае вызов конструктора отсутствует, что делает выделение более эффективным. Однако поля остаются без значений и объект нельзя использовать до инициализации всех полей.
1
26 / 26 / 10
Регистрация: 22.12.2013
Сообщений: 153
25.02.2014, 15:40
У меня восьмая студия
В отличие то классов, структуры могут быть созданы без использования нового оператора.
http://msdn.microsoft.com/ru-r... 90%29.aspx
И в где правда
а, сори, у меня только свойство в структуре
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
25.02.2014, 15:42  [ТС]
tezaurismosis,

C#
1
2
// Initialize:
k1.Str = str;
не?
0
26 / 26 / 10
Регистрация: 22.12.2013
Сообщений: 153
25.02.2014, 15:43
не,
private string str
не инициализирован
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
25.02.2014, 15:48  [ТС]
Цитата Сообщение от паха76 Посмотреть сообщение
private string str не инициализирован
Дык он должен автоматом инициализироваться при k1.Str = str или я что то недопонимаю?

Как инициализировать приватные поля структуры?
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
25.02.2014, 15:48
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

EVG-1980, благо что поле одно, а если несколько - инициализация последующего будет над недоинициализированным экземпляром. Под инициализацией я пониманию создание экземпляра путём вызова конструктора.
1
26 / 26 / 10
Регистрация: 22.12.2013
Сообщений: 153
25.02.2014, 15:49
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Декларация структуры без NEW
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.02.2014, 16:43
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

EVG-1980, стандарт языка требует, чтобы при инициализации структуры без вызова конструктора всем полям были присвоены значения, и это должно быть статически проверяемо на стадии компиляции.
В вашем примере происходит присвоение значения свойству, а не полю, что фактически является вызовом метода, то есть происходит использование структуры... а структурой нельзя пользоваться до присвоения всем полям значений.
Компилятор же не берется проверять, во всех ли случаях в сеттере свойства происходит присвоение полю и не происходит ли обращение к какому-нибудь другому, еще не проинициализированному, полю.

Примеры:
C#
1
2
3
4
struct Stubborn
{
   public int x;
}
C#
1
2
3
4
5
6
Stubborn k;
k.ToString(); // Нельзя, т.к. поле x не проинициализировано
 
Stubborn z;
z.x = 12;
z.ToString(); // OK
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct Stubborn
{
   public int x;
   public string y;
}
 
Stubborn k;
k.x = 2;
k.ToString(); // Еще нельзя, т.к. не всем полям присвоены значения
 
Stubborn z;
z.x = 3;
z.y = "Hello!";
k.ToString(); // OK
Подводя итог: инициализировать структуру без использования конструктора можно только в том случае, если все поля в ней открыты для прямого доступа из вызывающего объекта.
Ну или если инициализация памяти проведена через небезопасный контекст:
C#
1
2
3
4
5
6
7
8
9
10
11
struct Stubborn
{
   public int x;
}
 
Stubborn k;
 
int* ptr = (int*)&k;
*ptr = 120;
 
k.ToString(); // OK
Но на то он и небезопасный.
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.02.2014, 16:43
Помогаю со студенческими работами здесь

Предварительная декларация
Как известно, подключать хидеры в хидеры нехорошо. Вместо этого рекомендуется использовать предварительную декларацию. Как использовать её...

БП: Декларация по ЕНВД
Бухгалтерия 2.0. Создается декларация по ЕНВД. В разделе 1 идет разбивка по ОКАТО. Бухгалтер корректирует цифры вручную (где-то...

Декларация типа
Нашёл в книге одну непонятную декларацию: fmap:: (a->b) -> f a -> f b Так вот, почему не использовать fmap:: (a->b) -> a...

Неявная декларация функции «gets»
Доброе время суток! Столкнулся с такой проблемой. Мне нужно считывать текстовые данные из консоли и обрабатывать их далее. Следующий код не...

Декларация По Налогу На Прибыль
Не получается сформировать отчёт "Декларация по налогам на прибыль организации" с указанием кодов квартала в разделе 1.2 Пичатается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru