Книги онлайн и без регистрации » Разная литература » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 199 200 201 202 203 204 205 206 207 ... 407
Перейти на страницу:
чтением конфигурационного файла и получением значения CarName. Обновите операторы using в файле Program.cs, как показано ниже:

using System;

using System.IO;

using Microsoft.Extensions.Configuration;

Модифицируйте метод Main() следующим образом:

static void Main(string[] args)

{

  IConfiguration config = new ConfigurationBuilder()

    .SetBasePath(Directory.GetCurrentDirectory())

    .AddJsonFile("appsettings.json", true, true)

    .Build();

}

Новая подсистема конфигурации начинается с создания экземпляра класса ConfigurationBuilder. Он позволяет добавлять множество файлов, устанавливать свойства (такие как местоположение конфигурационных файлов) и, в конце концов, встраивать конфигурацию внутрь экземпляра реализации интерфейса IConfiguration.

Имея экземпляр реализации IConfiguration, вы можете обращаться с ним так, как принято в версии .NET 4.8. Добавьте приведенный далее код в конец метода Main() и после запуска приложения вы увидите, что значение будет выведено на консоль:

Console.WriteLine($"My car's name is {config["CarName"]}");

Console.ReadLine();

В дополнение к файлам JSON существуют пакеты для поддержки переменных среды, Azure Key Vault, аргументов командной строки и многого другого. Подробные сведения ищите в документации по .NET Core.

Построение и потребление библиотеки классов .NET Core

Чтобы заняться исследованием мира библиотек классов .NET Core, будет создана сборка *.dll (по имени CarLibrary), содержащая небольшой набор открытых типов. Для начала создайте решение. Затем создайте проект библиотеки классов по имени CarLibrary и добавьте его в решение, если это еще не делалось.

dotnet new sln -n Chapter16_AllProjects

dotnet new classlib -lang c# -n CarLibrary -o .CarLibrary -f net5.0

dotnet sln .Chapter16_AllProjects.sln add .CarLibrary

Первая команда создает в текущем каталоге пустой файл решения по имени Chapterl6_AllProjects (-n). Вторая команда создает новый проект библиотеки классов .NET 5.0 (-f) под названием CarLibrary (-n) в подкаталоге CarLibrary (-о). Указывать выходной подкаталог (-о) необязательно. Если он опущен, то проект будет создан в подкаталоге с таким же именем, как у проекта. Третья команда добавляет новый проект к решению.

На заметку! Интерфейс командной строки .NET Core снабжен хорошей справочной системой. Для получения сведений о любой команде укажите с ней -h. Например, чтобы увидеть все шаблоны, введите dotnet new -h. Для получения дополнительной информации о создании проекта библиотеки классов введите dotnet new classlib -h.

После создания проекта и решения вы можете открыть его в Visual Studio (или Visual Studio Code), чтобы приступить к построению классов. Открыв решение, удалите автоматически сгенерированный файл Class1.cs. Проектное решение библиотеки для работы с автомобилями начинается с создания перечислений EngineStateEnum и MusicMediaEnum. Добавьте в проект два файла с именами MusicMediaEnum.cs и EngineStateEnum.cs и поместите в них следующий код:

// MusicMediaEnum.cs

namespace CarLibrary

{

    // Тип музыкального проигрывателя, установленный в данном автомобиле.

    public enum MusicMediaEnum

    {

        MusicCd,

        MusicTape,

        MusicRadio,

        MusicMp3

    }

}

// EngineStateEnum.cs

namespace CarLibrary

{

    // Представляет состояние двигателя.

    public enum EngineStateEnum

    {

        EngineAlive,

        EngineDead

    }

}

Далее создайте абстрактный базовый класс по имени Car, который определяет разнообразные данные состояния через синтаксис автоматических свойств. Класс Car также имеет единственный абстрактный метод TurboBoost(), в котором применяется специальное перечисление (EngineState), представляющее текущее состояние двигателя автомобиля. Вставьте в проект новый файл класса C# по имени Car.cs со следующим кодом:

namespace 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 (спортивный автомобиль). В каждом из них абстрактный метод TurboBoost() переопределяется для отображения подходящего сообщения в окне консоли. Вставьте в проект два новых файла классов C# с именами MiniVan.cs и SportsCar.cs. Поместите в них показанный ниже код:

// SportsCar.cs

using 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.cs

using 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 со скомпилированной сборкой. Если у вас нет утилиты ildasm.exe (описанной ранее в книге), то она также находится в каталоге для настоящей главы внутри хранилища GitHub.

ildasm /all /METADATA /out=CarLibrary.il

    .CarLibrarybinDebugnet5.0CarLibrary.dll

Раздел манифеста Manifest дизассемблированных результатов начинается со строки //Metadata version: 4.0.30319. Непосредственно за ней следует список всех внешних сборок, требуемых для библиотеки классов:

// Metadata version: v4.0.30319

.assembly extern System.Runtime

{

  .publickeytoken = (B0 3F 5F 7F

1 ... 199 200 201 202 203 204 205 206 207 ... 407
Перейти на страницу:

Комментарии
Минимальная длина комментария - 20 знаков. В коментария нецензурная лексика и оскорбления ЗАПРЕЩЕНЫ! Уважайте себя и других!
Комментариев еще нет. Хотите быть первым?