В главе была раскрыта роль структурированной обработки исключений. Когда методу необходимо отправить объект ошибки вызывающему коду, он должен создать, сконфигурировать и сгенерировать специфичный объект производного от System.Exception
throw языка С#. Вызывающий код может обрабатывать любые входные исключения с применением ключевого слова catch и необязательного блока finally. В версии C# 6 появилась возможность создавать фильтры исключений с использованием дополнительного ключевого слова when, а в версии C# 7 расширен перечень мест, где можно генерировать исключения.Когда вы строите собственные специальные исключения, то в конечном итоге создаете класс, производный от класса System.ApplicationException
System.SystemException, представляют критические (и фатальные) ошибки, генерируемые исполняющей средой .NET 5. Наконец, в главе были продемонстрированы разнообразные инструменты среды Visual Studio, которые можно применять для создания специальных исключений (согласно установившейся практике .NET), а также для отладки необработанных исключений. Глава 8
Работа с интерфейсами
Материал настоящей главы опирается на ваши текущие знания объектно-ориентированной разработки и посвящен теме программирования на основе интерфейсов. Вы узнаете, как определять и реализовывать интерфейсы, а также ознакомитесь с преимуществами построения типов, которые поддерживают несколько линий поведения. В ходе изложения обсуждаются связанные темы, такие как получение ссылок на интерфейсы, явная реализация интерфейсов и построение иерархий интерфейсов. Будет исследовано несколько стандартных интерфейсов, определенных внутри библиотек базовых классов .NET Core. Кроме того, раскрываются новые средства C# 8, связанные с интерфейсами, в том числе стандартные методы интерфейсов, статические члены и модификаторы доступа. Вы увидите, что специальные классы и структуры могут реализовывать эти предопределенные интерфейсы для поддержки ряда полезных аспектов поведения, включая клонирование, перечисление и сортировку объектов.
Понятие интерфейсных типов
Первым делом давайте ознакомимся с формальным определением
Средство стандартных методов интерфейсов, введенное в C# 8.0, позволяет методам интерфейса содержать реализацию, которая может переопределяться или не переопределяться в классе реализации. Более подробно о таком средстве речь пойдет позже в главе.
Как вы наверняка догадались, библиотеки базовых классов .NET Core поставляются с многочисленными предопределенными интерфейсными типами, которые реализуются разнообразными классами и структурами. Например, в главе 21 будет показано, что инфраструктура ADO.NET содержит множество поставщиков данных, которые позволяют взаимодействовать с определенной системой управления базами данных. Таким образом, в ADO.NET на выбор доступен обширный набор классов подключений (SqlConnection
OleDbConnection, OdbcConnection и т.д.). Вдобавок независимые поставщики баз данных (а также многие проекты с открытым кодом) предлагают библиотеки .NET Core для взаимодействия с большим числом других баз данных (MySQL, Oracle и т.д.), которые содержат объекты, реализующие упомянутые интерфейсы.Невзирая на тот факт, что каждый класс подключения имеет уникальное имя, определен в отдельном пространстве имен и (в некоторых случаях) упакован в отдельную сборку, все они реализуют общий интерфейс под названием IDbConnection
// Интерфейс IDbConnection определяет общий набор членов,
// поддерживаемый всеми классами подключения.
public interface IDbConnection : IDisposable
{
// Методы
IDbTransaction BeginTransaction;
IDbTransaction BeginTransaction(IsolationLevel il);
void ChangeDatabase(string databaseName);
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT