Язык программирования C#9 и платформа .NET5
Часть 309 из 642 Информация о книге
После создания проекта и решения вы можете открыть его в Visual Studio (или Visual Studio Code), чтобы приступить к построению классов. Открыв решение, удалите автоматически сгенерированный файл
. Проектное решение библиотеки для работы с автомобилями начинается с создания перечисленийClass1.csиEngineStateEnum. Добавьте в проект два файла с именамиMusicMediaEnumиMusicMediaEnum.csи поместите в них следующий код:EngineStateEnum.cs// MusicMediaEnum.csnamespace CarLibrary{// Тип музыкального проигрывателя, установленный в данном автомобиле.public enum MusicMediaEnum{MusicCd,MusicTape,MusicRadio,MusicMp3}}// EngineStateEnum.csnamespace CarLibrary{// Представляет состояние двигателя.public enum EngineStateEnum{EngineAlive,EngineDead}}Далее создайте абстрактный базовый класс по имени
, который определяет разнообразные данные состояния через синтаксис автоматических свойств. КлассCarтакже имеет единственный абстрактный методCar, в котором применяется специальное перечисление (TurboBoost()), представляющее текущее состояние двигателя автомобиля. Вставьте в проект новый файл класса C# по имениEngineStateсо следующим кодом:Car.csnamespace CarLibrary{// Абстрактный базовый класс в иерархии.public abstract class Car{public string PetName {get; set;}public int CurrentSpeed {get; set;}public int MaxSpeed {get; set;}protected EngineStateEnum State = EngineStateEnum.EngineAlive;public EngineStateEnum EngineState => State;public abstract void TurboBoost();protected Car(){}protected Car(string name, int maxSpeed, int currentSpeed){PetName = name;MaxSpeed = maxSpeed;CurrentSpeed = currentSpeed;}}}Теперь предположим, что есть два непосредственных потомка класса
с именамиCar(минивэн) иMiniVan(спортивный автомобиль). В каждом из них абстрактный методSportsCarпереопределяется для отображения подходящего сообщения в окне консоли. Вставьте в проект два новых файла классов C# с именамиTurboBoost()иMiniVan.cs. Поместите в них показанный ниже код:SportsCar.cs// SportsCar.csusing System;namespace CarLibrary{public class SportsCar : Car{public SportsCar(){ }public SportsCar(string name, int maxSpeed, int currentSpeed): base (name, maxSpeed, currentSpeed){ }public override void TurboBoost(){Console.WriteLine("Ramming speed! Faster is better...");}}}// MiniVan.csusing System;namespace CarLibrary{public class MiniVan : Car{public MiniVan(){ }public MiniVan(string name, int maxSpeed, int currentSpeed): base (name, maxSpeed, currentSpeed){ }public override void TurboBoost(){// Минивэны имеют плохие возможности ускорения!State = EngineStateEnum.EngineDead;Console.WriteLine("Eek! Your engine block exploded!");}}}Исследование манифеста
Перед использованием
в клиентском приложении давайте посмотрим, как библиотека кода устроена внутри. Предполагая, что проект был скомпилирован, запустите утилитуCarLibrary.dllсо скомпилированной сборкой. Если у вас нет утилитыildasm.exe(описанной ранее в книге), то она также находится в каталоге для настоящей главы внутри хранилища GitHub.ildasm.exe