Подписывайтесь также на мой Телеграм!
Другие статьи цикла:
Переменные с типом string, int, double и bool всегда содержат единственное значение - текст, единственное число или да/нет значение. Однако, такие "атомарные" значения можно объединить в некий агрегат, который называется объект. Единичный объект может содержать множество значений, которые называются компонентами или членами. Такая группировка может дойти и до того, что объект будет содержать другие объекты внутри. В этой части поизучаем объекты.
Который час?
Первый объект (а точнее говоря структура - обсудим позже в чем разница), который мы изучим, будет DateTime, который содержит различные компоненты времени, такие как день, месяц, год, минута, секунда и так далее.
Задача
Напишем программу, которая отображает текущую дату и время для пользователя.
Решение
Какая дата сегодня?
Продолжим разбираться с DateTime.
Задача
Допустим, нас интересует только сегодняшняя дата без времени.
Разница между сегодняшней датой и текущим временем может иметь значение в разных программах.
Решение
Работа с компонентами даты
Вы можете спросить где же упомянутые компоненты? Если после переменной с типом DateTime дописать точку, VS отобразит все доступные компоненты этой структуры.
Задача
Изучим некоторые компоненты структуры DateTime.
Решение
Использование пространств имен
Итак, узнав о первом объекте (а точнее структуре) стоит обсудить новое понятие - пространство имен, или namespace.
Важность использования using
У вас открыт проект, в котором мы пишем код.
По умолчанию (хотя это нигде и не указано) в файле, в котором мы пишем код (Program.cs) подключено пространство имен под названием System. Благодаря этому мы и можем пользоваться различными типами данных, такими как DateTime и Console. То есть можно сказать, что DateTime и Console принадлежат пространству имен System. В этом можно убедиться, если навести мышку на одно из упоминаний этих типов в коде:
Практически всё в C# принадлежит какой-то более высокой по иерархии единице. В нашем случае DateTime и Console принадлежат пространству System. Если вы хотите пользоваться какими-то типами, необходимо подключить пространство имен, в котором эти типы находятся. В нашем случае такое подключение отсутствует, потому что оно используется по умолчанию, но в другом случае будет необходимо явно прописать - какое пространство имен мы хотим подключить. Вот пример: мы не можем использовать тип StringBuilder пока не подключим namespace, в котором этот тип содержится
Подключим необходимое пространство при помощи команды using:
Мы подключили нужный namespace и вот уже можем пользоваться и типом StringBuilder и остальными типами этого пространства.
Для чего же нужны пространства имен? Может быть несколько причин:
- Мы хотим структурировать свой код таким образом, чтобы в различных пространствах имен лежали разные типы, сгруппированные по смыслу. Например все типы, которые позволяют работать с текстом, мы положим в одно пространство имен, а другие типы, которые нужны для работы с файлами, в другое
- Еще одна причина - мы всегда используем в своей программе не только свои типы, которые мы разработали, но и типы, которые написал для нас Microsoft (например DateTime) или кто-то еще. И эти типы могут случайно называться одинаково. Если они будут принадлежать различным пространствам имен, то никакой проблемы нет. Подключая нужное пространство можно пользоваться тем или иным типом. Но в одном и том же пространстве невозможно создать два типа с одинаковым названием.
В целом можно и не прописывать все необходимые нам пространства имен через using и указывать пространство возле типа объекта, но такой код может показаться более громоздким:
C# 9.0 минималистическая программа
Так как мы вышли за пределы нашего метода Main можем провести еще один важный эксперимент. Начиная с C# версии 9 можно отказаться от шаблонного или стандартного кода (boilerplate code), который мы не трогаем при написании программы - то есть от строк, в которых написано namespace, class, Main и от всех фигурных скобок, которые используются в этих строчках.
Вернемся к коду, который мы писали для вывода компонентов даты и времени и уберем весь стандартный код:
Запустите программу. Она работает как и прежде.
Использование объекта Environment
Завершим эту часть взглянув еще раз на объект Environment (он встречался в части 3).
Задача
Объект Environment содержит информацию об "окружении" нашей программы (например о компьютере и операционной системе). Мы ранее использовали Environment.NewLine компонент. Сейчас узнаем и о других компонентах этого объекта.
Решение
В отличии от предыдущей программы мы не выделяли компоненты объекта в отдельные переменные. Мы использовали их напрямую чтобы продемонстрировать, что можно и так.
Используемые материалы и идеи:
- Книга Radek Vystavěl "C# Programming for Absolute Beginners: Learn to Think Like a Programmer and Start Writing Code". Второе издание