Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

Знакомство с типом класса 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
, как показано ниже:

Console.WriteLine("***** Fun with Class Types *****\n");

// Разместить в памяти и сконфигурировать объект Car.

Car myCar = new Car;

myCar.petName = "Henry";

myCar.currSpeed = 10;

// Увеличить скорость автомобиля в несколько раз и вывести новое состояние.

for (int i = 0; i <= 10; i++)

{

myCar.SpeedUp(5);

myCar.PrintState;

}

Console.ReadLine;

Запустив программу, вы увидите, что переменная

Car
(
myCar
) поддерживает свое текущее состояние на протяжении жизни приложения:

***** Fun with Class Types *****

Henry is going 15 MPH.

Henry is going 20 MPH.

Henry is going 25 MPH.

Henry is going 30 MPH.

Henry is going 35 MPH.

Henry is going 40 MPH.

Henry is going 45 MPH.

Henry is going 50 MPH.

Henry is going 55 MPH.

Henry is going 60 MPH.

Henry is going 65 MPH.

Размещение объектов с помощью ключевого слова new

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

new
. Если вы не укажете ключевое слово
new
и попытаетесь использовать переменную класса в последующем операторе кода, то получите ошибку на этапе компиляции. Например, приведенные далее операторы верхнего уровня не скомпилируются:

Поделиться:
Популярные книги

Курсант: назад в СССР

Дамиров Рафаэль
1. Курсант
Фантастика:
попаданцы
альтернативная история
7.33
рейтинг книги
Курсант: назад в СССР

Чужая семья генерала драконов

Лунёва Мария
6. Генералы драконов
Фантастика:
фэнтези
5.00
рейтинг книги
Чужая семья генерала драконов

Пышка и Герцог

Ордина Ирина
Фантастика:
юмористическое фэнтези
историческое фэнтези
фэнтези
5.00
рейтинг книги
Пышка и Герцог

Имперский Курьер. Том 5

Бо Вова
5. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Имперский Курьер. Том 5

Имя нам Легион. Том 7

Дорничев Дмитрий
7. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 7

Возвышение Меркурия

Кронос Александр
1. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия

Законы Рода. Том 11

Андрей Мельник
11. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 11

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

Вираж бытия

Ланцов Михаил Алексеевич
1. Фрунзе
Фантастика:
героическая фантастика
попаданцы
альтернативная история
6.86
рейтинг книги
Вираж бытия

Отмороженный 11.0

Гарцевич Евгений Александрович
11. Отмороженный
Фантастика:
боевая фантастика
рпг
попаданцы
фантастика: прочее
фэнтези
5.00
рейтинг книги
Отмороженный 11.0

История "не"мощной графини

Зимина Юлия
1. Истории неунывающих попаданок
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
История немощной графини

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

Газлайтер. Том 15

Володин Григорий Григорьевич
15. История Телепата
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Газлайтер. Том 15

Призыватель нулевого ранга

Дубов Дмитрий
1. Эпоха Гардара
Фантастика:
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Призыватель нулевого ранга