Знакомство с типом класса C#
С точки зрения платформы .NET Core наиболее фундаментальной программной конструкцией является тип класса. Формально класс — это определяемый пользователем тип, состоящий из полей данных (часто называемых переменными-членами) и членов, которые оперируют полями данных (к ним относятся конструкторы, свойства, методы, события и т.д.). Коллективно набор полей данных представляет "состояние" экземпляра класса (также известного как объект). Мощь объектно-ориентированных языков, таких как С#, заключается в том, что за счет группирования данных и связанной с ними функциональности в унифицированное определение класса вы получаете возможность моделировать свое программное обеспечение в соответствии с сущностями реального мира.
Для начала создайте новый проект консольного приложения C# по имени SimpleClassExample
. Затем добавьте в проект новый файл класса (Car.cs
). Поместите в файл Car.cs
оператор using
и определите пространство имен, как показано ниже:
using System;
namespace SimpleClassExample
{
}
На заметку! В приводимых далее примерах определять пространство имен строго обязательно. Однако рекомендуется выработать привычку использовать пространства имен во всем коде, который вы будете писать. Пространства имен подробно обсуждались в главе 1.
Класс определяется в C# с применением ключевого слова class
. Вот как выглядит простейшее объявление класса (позаботьтесь о том, чтобы объявление класса находилось внутри пространства имен SimpleClassExample
):
class Car
{
}
После определения типа класса необходимо определить набор переменных-членов, которые будут использоваться для представления его состояния. Например, вы можете принять решение, что объекты Car
(автомобили) должны иметь поле данных типа int
, представляющее текущую скорость, и поле данных типа string
для представления дружественного названия автомобиля. С учетом таких начальных проектных положений класс Car
будет выглядеть следующим образом:
class Car
{
// 'Состояние' объекта Car.
public string petName;
public int currSpeed;
}
Обратите внимание, что переменные-члены объявлены с применением модификатора доступа public
. Открытые (public
) члены класса доступны напрямую после того, как создан объект этого типа. Вспомните, что термин объект используется для описания экземпляра заданного типа класса, который создан с помощью ключевого слова new
.
На заметку! Поля данных класса редко (если вообще когда-нибудь) должны определяться как открытые. Чтобы обеспечить целостность данных состояния, намного лучше объявлять данные закрытыми (private
) или возможно защищенными (protected
) и разрешать контролируемый доступ к данным через свойства (как будет показано далее в главе). Тем не менее, для максимального упрощения первого примера мы определили поля данных как открытые.
После определения набора переменных-членов, представляющих состояние класса, следующим шагом в проектировании будет установка членов, которые моделируют его поведение. Для этого примера в классе Car
определены методы по имени SpeedUp()
и PrintState()
. Модифицируйте код класса Car
следующим образом:
class Car
{
// 'Состояние' объекта Car.
public string petName;
public int currSpeed;
// Функциональность Car.
// Использовать синтаксис членов, сжатых до выражений,
// который рассматривался в главе 4.
public void PrintState()
=> Console.WriteLine("{0} is going {1} MPH.", petName, currSpeed);
public void SpeedUp(int delta)
=> currSpeed += delta;
}
Метод PrintState()
— простая диагностическая функция, которая выводит текущее состояние объекта Car
в окно командной строки. Метод SpeedUp()
увеличивает скорость автомобиля, представляемого объектом Car
, на величину, которая передается во входном параметре типа int
. Обновите операторы верхнего уровня в файле Program.cs
, как показано ниже: