- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
Шрифт:
Интервал:
Закладка:
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