Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
228 / 111 / 79
Регистрация: 17.10.2016
Сообщений: 312
1

Инициализация структуры как поля класса

22.10.2016, 21:22. Просмотров 1283. Ответов 5
Метки нет (Все метки)


Дайте пожалуйста объяснение,
как инициализируеся структура которая является полем класса:

Есть некая структура
C#
1
2
3
4
5
6
7
8
public struct SomeStruct
    {
        int field;
        public int GetField()
        {
            return field;
        }
    }
которая поле некоторого класса
C#
1
2
3
4
5
6
7
8
 public class SomeClass
    {
        SomeStruct st;
        public void  PrintStructField()
        {
            Console.WriteLine(st.GetField());
        }
    }
Если создать экземпляр структуры без использования операции new
и обратиться к полю структуры, то законно получим ошибку "Использование неинициализированной переменной"

Если же создать экземпляр класса с полем структурой,
то можно обращаться к полю этой структуры . Почему?
C#
1
2
3
4
5
6
7
8
   public static void Main(string[] args)
    {      
         SomeStruct st;
         Console.WriteLine(st.GetField());  // Использование локальной переменной "st", которой не присвоено значение.
 
 
        SomeClass cl = new SomeClass();
        cl.PrintStructField();   // ОК печатает: 0
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2016, 21:22
Ответы с готовыми решениями:

Инициализация полей структуры в конструкторе по-умолчанию класса
Всем привет! #include <string> #include <vector> #pragma once class StudentsList {...

Инициализация поля класса (строки в стиле Си): найти причину возникновения ошибки и исправить эту ошибку
Начинаю учить C++ и хочу сделать что-то типо "игры" в текстовом варианте. Вот столкнулся с...

Поля структуры внутри класса
Здравствуйте, почему при выполнении метода movingNode поля элемента структуры node (координаты x и...

Инициализация экземпляра класса, как поле другого класса
Всем доброго времени суток ! Есть класс: class a{ public: a(int _type): type(_type) {} ...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы С#-разработчиков‌
5
4663 / 3214 / 1367
Регистрация: 09.05.2015
Сообщений: 7,890
22.10.2016, 21:33 2
Потому что в одном случае локальная переменная, а в другом поле класса. Поля класса инициализируются значениями по умолчанию (SomeStruct st = default(SomeStruct)) при создании экземпляра класса.
1
228 / 111 / 79
Регистрация: 17.10.2016
Сообщений: 312
22.10.2016, 21:47  [ТС] 3
Someone007, ну да, этот ответ видел в книге, но что-то он для меня не полный.

Добавлено через 4 минуты
Если бы полем класса был другой класс, то там мне понятно
экземпляр класса по умолчанию = null. Придется вызвать конструктор самостоятельно.
А почему класс сам решает структуру инициализировать?
Может есть более подробное объяснение?

Добавлено через 3 минуты
Или походу тут нет никакой проблемы
0
4663 / 3214 / 1367
Регистрация: 09.05.2015
Сообщений: 7,890
22.10.2016, 21:49 4
Цитата Сообщение от John999 Посмотреть сообщение
А почему класс сам решает структуру инициализировать?
Так решили разработчики. А что должно по вашему произойти?
Цитата Сообщение от John999 Посмотреть сообщение
Может есть более подробное объяснение?
У меня нету.
0
121 / 121 / 72
Регистрация: 11.05.2014
Сообщений: 331
22.10.2016, 21:51 5
John999, вот тут посмотрите примеры. Хорошо написано, как мне кажется.
1
228 / 111 / 79
Регистрация: 17.10.2016
Сообщений: 312
22.10.2016, 21:56  [ТС] 6
Цитата Сообщение от Someone007 Посмотреть сообщение
Так решили разработчики. А что должно по вашему произойти?
Всё устраивает. Ожидал что нужно инициализировать вручную.
Или присвоить значения полям , или конструктор вызвать.

Добавлено через 4 минуты
Ладно, похоже вопрос на пустом месте возник. Спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2016, 21:56

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Из структуры внутри класса достучаться до нестатического поля
Нужно изнутри структуры перегрузить оператор>для priority_queue. Результат операции > зависит от...

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно,...

инициализация констант как данных-членов класса
Проблема: надо как-то присвоить первоначальное значение константам как данным-членам класса. В...

Друзья, подскажите, говорят, что можно поля класса инициализировать в момент объявления класса. Как это сделать?
Скажу сразу, а то сейчас начнется, что я прекрасно понимаю, что поля класса при объявлении...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.