Методы и свойства класса Console - C# и .NET

Методы и свойства класса Console

В этом учебнике C# для начинающих мы будем ограничиваться исключительно разработкой приложений для командной строки (консоли), поэтому нелишним будет уже сейчас изучить некоторые моменты связанные с классом Console, который мы пока ещё неосознанно, но используем при написании своих приложений на C#.

Console в C# – что это?

Для того, чтобы наши приложения на C# могли получать и отправлять данные пользователю, используя командную строку Windows (консоль), Microsoft разработала специальный класс C# –Console. Этот класс представляет стандартные потоки ввода, вывода и ошибок для консольных приложений. Иными словами, если вам необходимо разработать пользовательский интерфейс консольного приложения, то вам необходимо использовать класс Console

Класс располагается в пространстве имен System, которое уже по умолчанию подключается в шаблон консольного приложения при создании нового проекта в Visual Studio. Поэтому нам нет необходимости явно подключать это пространство имен в проект, как мы это делали в предыдущей части, если вы работаете в последней версии Visual. Studio.

Класс Console предоставляет нам ряд свойств и методов для работы с консолью. Например, мы уже использовали такие методы этого класса как WriteLine(), Write()и ReadLine().

Свойства класса Console

Класс предоставляет нам достаточно много различных свойств, которые мы можем использовать для настройки консоли. Перечислим только основные из них, которые мы будем использовать в дальнейшем:

Свойство Описание
BackgroundColor Цвет фона консоли. По умолчанию консоль имеет черный цвет фона
ForegroundColor Цвет текста консоли. По умолчанию – белый
Title Заголовок консоли
CursorSize Высота курсора, выраженная в процентах от высоты ячейки символа

Продемонстрируем использование этих свойств в приложении. Запустите Visual Studio и создайте проект нового консольного приложения с настройками по умолчанию и измените исходный код программы следующим образом:

Console.Title = "Класс Console";
Console.WriteLine("Hello, World!");
Console.BackgroundColor = ConsoleColor.DarkBlue;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Это красный текст на темно-синем фоне");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("А это белый текст на темно-синем фоне");

Вот как будет выглядеть результат работы программы:Console в C#

В первой строке мы меняем заголовок консоли:

Console.Title = "Класс Console";

Обратите внимание, что, если вы запускаете приложение из Visual Studio, то приложение будет открыто в консоли отладки и текст заголовка будет не виден. Чтобы заголовок консоли был виден, необходимо запускать приложение из проводника Windows.

Далее мы выводим в консоль строку

Console.WriteLine("Hello, World!");

Так как мы ещё не воспользовались никакими другими свойствами класса, то значение цвета фона и текста остаются по умолчанию, то есть выводится белый текст на черном фоне.

Далее, мы меняем цвет фона и цвет текста:

Console.BackgroundColor = ConsoleColor.DarkBlue; 
Console.ForegroundColor = ConsoleColor.Red;

Чтобы указать необходимый нам цвет, мы используем специальный тип – перечисление в котором содержатся все доступные нам цвета для работы с консолью. В итоге выводится красный текст на темно-синем фоне (вторая строка на рисунке).

После этого мы снова меняем значения цвета текста и снова выводим строку (третья строка текста на рисунке выше):

Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("А это белый текст на темно-синем фоне");

Теперь рассмотрим основные методы класса Console

Методы класса Console

Методы вывода данных в консоль: WriteLine() и Write()

Для вывода данных в консоль предусмотрены два метода – WriteLine()и Write(). Отличие этих методов состоит в том, что метод WriteLine()выводит данные в консоль и переводит курсор на новую строку, а метод Write()выводит данные в консоль и оставляет курсор на той же строке. Почему я говорю “выводит данные”, а не “выводит строку”? Дело в том, что оба этих метода имеют несколько версий, которые позволяют выводить в консоль не только строки, но и, например, числа.

Перепишем код нашего приложения следующим образом:

Console.Write("Дробные числа в C#, например, "); //курсор останется на той же строке
Console.ForegroundColor = ConsoleColor.Green;
Console.Write(101.1); //здесь курсор также остается на новой строке
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine(" пишутся через точку"); //здесь курсор будет снова переведен на новую строку
Console.ForegroundColor= ConsoleColor.Red;
Console.WriteLine("Помните об этом!");

Здесь код сопровожден комментариями, поэтому отдельно рассматривать его не будем, а просто посмотрим на результат:

Console

Как видите, используя метод Write() мы можем писать текст одной строки разными цветами.

Методы чтения данных из консоли: ReadLine(), Read(), ReadKey()

Класс Console предоставляет нам сразу три метода для чтения данных из консоли. Давайте разберемся в чем их отличие и как использовать эти методы в нашем приложении. Краткое описание этих методом следующее:

  • Read()– считывает следующий символ из стандартного потока ввода и возвращает его ASCII-код. Результатом будет какое-то целое число (код символа)
  • ReadLine()– считывает строку из стандартного потока ввода и возвращает её
  • ReadKey()– считывает символ из стандартного потока ввода и возвращает информацию о нем.

Теперь попробуем на практике разобраться как работают эти метода. Давайте перепишем исходный код нашей программы следующим образом:

Console.Write("Введите любое количество символов с клавиатуры: ");
var key = Console.ReadKey();
Console.WriteLine($" Первый символ: {key.KeyChar}");

Console.Write("Введите любое количество символов с клавиатуры: ");
var data = Console.ReadLine();
Console.WriteLine(data);

Console.Write("Введите любое количество символов с клавиатуры: ");
var symbol = Console.Read();
Console.WriteLine($"Первый символ: {symbol}");

Console.WriteLine("Нажмите любую клавишу, чтобы завершить работу");
Console.ReadKey();

Здесь сразу стоит обратить внимание на то, как мы сохраняем значения, например:

var key = Console.ReadKey();

здесь var означает, что перед нами неявно типизированная переменная.

Подробнее о ключевом слове var можно узнать здесь

Теперь запустите приложение и проверьте его работу. Обратите внимание на то, что в случае с методом ReadKey() мы получаем результат сразу же, как только наживаем какую-либо клавишу на клавиатуре, в то время как Read()и ReadLine()получают данные из консоли только, когда мы нажмем клавишу ввод.  Поэтому одним из способов использования метода ReadKey()является остановить дальнейшее выполнение программы до тех пор, пока пользователь не нажмет какую-либо клавишу на клавиатуре.

Обратите также внимание на то, как мы используем данные, полученные с использованием метода RreadKey():

Console.WriteLine($" Первый символ: {key.KeyChar}");

Переменная key содержит набор информации о набранном символе, включая и информацию о том, были ли нажаты какие-либо модификаторы, например, клавиша Ctrl или Shift. Поэтому, чтобы получить информацию о символе мы набираем имя переменной, затем ставим точку и указываем какое именно из доступных значений нам необходимо:

Подведем итог

Класс Console в C# используется для работы с консолью и разработки интерфейса консольного приложения. Используя этот класс, мы можем менять цвет фона и текста в командной строке, считывать данные из консоли и, наоборот. выводить результаты работы программы в консоль.

Домашнее задание №4

Создайте консольное приложение, которое будет запрашивает имя пользователя и выводит приветствие. Цвет текста запроса в консоли – зеленый, цвет текста приветствия – красный. Программа должна завершить работу только после того, как пользователь нажмет после приветствия какую-либо клавишу.

Решение домашней работы можно изучить на странице домашних заданий.