Найти в Дзене
CTO Pro IT & .NET

Курс по программированию на C# для начинающих. Часть 5. Работа с объектами

Подписывайтесь также на мой Телеграм! Другие статьи цикла: Переменные с типом string, int, double и bool всегда содержат единственное значение - текст, единственное число или да/нет значение. Однако, такие "атомарные" значения можно объединить в некий агрегат, который называется объект. Единичный объект может содержать множество значений, которые называются компонентами или членами. Такая группировка может дойти и до того, что объект будет содержать другие объекты внутри. В этой части поизучаем объекты. Который час? Первый объект (а точнее говоря структура - обсудим позже в чем разница), который мы изучим, будет DateTime, который содержит различные компоненты времени, такие как день, месяц, год, минута, секунда и так далее. Задача Напишем программу, которая отображает текущую дату и время для пользователя. Решение Какая дата сегодня? Продолжим разбираться с DateTime. Задача Допустим, нас интересует только сегодняшняя дата без времени. Разница между сегодняшней датой и текущим временем
Классы и объекты
Классы и объекты

Подписывайтесь также на мой Телеграм!

Другие статьи цикла:

Переменные с типом string, int, double и bool всегда содержат единственное значение - текст, единственное число или да/нет значение. Однако, такие "атомарные" значения можно объединить в некий агрегат, который называется объект. Единичный объект может содержать множество значений, которые называются компонентами или членами. Такая группировка может дойти и до того, что объект будет содержать другие объекты внутри. В этой части поизучаем объекты.

Который час?

Первый объект (а точнее говоря структура - обсудим позже в чем разница), который мы изучим, будет DateTime, который содержит различные компоненты времени, такие как день, месяц, год, минута, секунда и так далее.

Задача

Напишем программу, которая отображает текущую дату и время для пользователя.

Текущая дата и время
Текущая дата и время

Решение

Код
Код

Какая дата сегодня?

Продолжим разбираться с DateTime.

Задача

Допустим, нас интересует только сегодняшняя дата без времени.

Дата без времени
Дата без времени

Разница между сегодняшней датой и текущим временем может иметь значение в разных программах.

Решение

Сегодняшняя дата
Сегодняшняя дата

Работа с компонентами даты

Вы можете спросить где же упомянутые компоненты? Если после переменной с типом DateTime дописать точку, VS отобразит все доступные компоненты этой структуры.

Задача

Изучим некоторые компоненты структуры DateTime.

Решение

Компоненты даты
Компоненты даты
Вывод
Вывод

Использование пространств имен

Итак, узнав о первом объекте (а точнее структуре) стоит обсудить новое понятие - пространство имен, или namespace.

Важность использования using

У вас открыт проект, в котором мы пишем код.

По умолчанию (хотя это нигде и не указано) в файле, в котором мы пишем код (Program.cs) подключено пространство имен под названием System. Благодаря этому мы и можем пользоваться различными типами данных, такими как DateTime и Console. То есть можно сказать, что DateTime и Console принадлежат пространству имен System. В этом можно убедиться, если навести мышку на одно из упоминаний этих типов в коде:

Пространство имен System
Пространство имен System

Практически всё в C# принадлежит какой-то более высокой по иерархии единице. В нашем случае DateTime и Console принадлежат пространству System. Если вы хотите пользоваться какими-то типами, необходимо подключить пространство имен, в котором эти типы находятся. В нашем случае такое подключение отсутствует, потому что оно используется по умолчанию, но в другом случае будет необходимо явно прописать - какое пространство имен мы хотим подключить. Вот пример: мы не можем использовать тип StringBuilder пока не подключим namespace, в котором этот тип содержится

До подключения
До подключения

Подключим необходимое пространство при помощи команды using:

После подключения
После подключения

Мы подключили нужный namespace и вот уже можем пользоваться и типом StringBuilder и остальными типами этого пространства.

Для чего же нужны пространства имен? Может быть несколько причин:

  • Мы хотим структурировать свой код таким образом, чтобы в различных пространствах имен лежали разные типы, сгруппированные по смыслу. Например все типы, которые позволяют работать с текстом, мы положим в одно пространство имен, а другие типы, которые нужны для работы с файлами, в другое
  • Еще одна причина - мы всегда используем в своей программе не только свои типы, которые мы разработали, но и типы, которые написал для нас Microsoft (например DateTime) или кто-то еще. И эти типы могут случайно называться одинаково. Если они будут принадлежать различным пространствам имен, то никакой проблемы нет. Подключая нужное пространство можно пользоваться тем или иным типом. Но в одном и том же пространстве невозможно создать два типа с одинаковым названием.

В целом можно и не прописывать все необходимые нам пространства имен через using и указывать пространство возле типа объекта, но такой код может показаться более громоздким:

Использование пространства вместе с типом
Использование пространства вместе с типом

C# 9.0 минималистическая программа

Так как мы вышли за пределы нашего метода Main можем провести еще один важный эксперимент. Начиная с C# версии 9 можно отказаться от шаблонного или стандартного кода (boilerplate code), который мы не трогаем при написании программы - то есть от строк, в которых написано namespace, class, Main и от всех фигурных скобок, которые используются в этих строчках.

Вернемся к коду, который мы писали для вывода компонентов даты и времени и уберем весь стандартный код:

Программа без boilerplate code
Программа без boilerplate code

Запустите программу. Она работает как и прежде.

Использование объекта Environment

Завершим эту часть взглянув еще раз на объект Environment (он встречался в части 3).

Задача

Объект Environment содержит информацию об "окружении" нашей программы (например о компьютере и операционной системе). Мы ранее использовали Environment.NewLine компонент. Сейчас узнаем и о других компонентах этого объекта.

Решение

Environment компоненты
Environment компоненты

В отличии от предыдущей программы мы не выделяли компоненты объекта в отдельные переменные. Мы использовали их напрямую чтобы продемонстрировать, что можно и так.

Используемые материалы и идеи: