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

Когда функциональность класса (или структуры) решено расширить за счет поддержки интерфейсов, к определению добавляется список нужных интерфейсов, разделенных запятыми. Имейте в виду, что непосредственный базовый класс должен быть указан первым сразу после операции двоеточия. Если тип класса порождается напрямую от System.Object, тогда вы можете просто перечислить интерфейсы, поддерживаемые классом, т.к. компилятор C# будет считать, что типы расширяют System.Object, если не задано иначе. К слову, поскольку структуры всегда являются производными от класса System.ValueType (см. главу 4), достаточно указать список интерфейсов после определения структуры. Взгляните на приведенные ниже примеры:


// Этот класс является производными от System.Object

// и реализует единственный интерфейс.

public class Pencil : IPointy

{...}


// Этот класс также является производными от System.Object

// и реализует единственный интерфейс.

public class SwitchBlade : object, IPointy

{...}


// Этот класс является производными от специального базового

// класса и реализует единственный интерфейс.

public class Fork : Utensil, IPointy

{...}


// Эта структура неявно является производной

// от System.ValueType и реализует два интерфейса.

public struct PitchFork : ICloneable, IPointy

{...}


Важно понимать, что для интерфейсных элементов, которые не содержат стандартной реализации, реализация интерфейса работает по плану "все или ничего". Поддерживающий тип не имеет возможности выборочно решать, какие члены он будет реализовывать. Учитывая, что интерфейс IPointy определяет единственное свойство только для чтения, накладные расходы невелики. Тем не менее, если вы реализуете интерфейс, который определяет десять членов (вроде показанного ранее IDbConnection), тогда тип отвечает за предоставление деталей для всех десяти абстрактных членов.

В текущем примере добавьте к проекту новый тип класса по имени Triangle, который "является" Shape и поддерживает IPointy. Обратите внимание, что реализация доступного только для чтения свойства Points (реализованного с использованием синтаксиса членов, сжатых до выражений) просто возвращает корректное количество вершин (т.е. 3):


using System;

namespace CustomInterfaces

{

  // Новый класс по имени Triangle, производный от Shape.

  class Triangle : Shape, IPointy

  {

    public Triangle { }

    public Triangle(string name) : base(name) { }

    public override void Draw

    {

      Console.WriteLine("Drawing {0} the Triangle", PetName);

    }

    // Реализация IPointy.

    // public byte Points

    // {

    //    get { return 3; }

    // }

    public byte Points => 3;

  }

}


Модифицируйте существующий тип Hexagon, чтобы он также поддерживал интерфейс IPointy:


using System;

namespace CustomInterfaces

{

  // Hexagon теперь реализует IPointy.

  class Hexagon : Shape, IPointy

  {

    public Hexagon{ }

    public Hexagon(string name) : base(name){ }

    public override void Draw

    {

      Console.WriteLine("Drawing {0} the Hexagon", PetName);

    }

    // Реализация IPointy.

    public byte Points => 6;

  }

}


Подводя итоги тому, что сделано к настоящему моменту, на рис. 8.1 приведена диаграмма классов в Visual Studio, где все совместимые с IPointy классы представлены с помощью популярной системы обозначений в виде "леденца на палочке". Еще раз обратите внимание, что Circle и ThreeDCircle не реализуют IPointy, поскольку такое поведение в этих классах не имеет смысла.



На заметку! Чтобы скрыть или отобразить имена интерфейсов в визуальном конструкторе классов, щелкните правой кнопкой мыши на значке, представляющем интерфейс, и выберите в контекстном меню пункт Collapse (Свернуть) или Expand (Развернуть).

Обращение к членам интерфейса на уровне объектов

Перейти на страницу:

Похожие книги

Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Нил Форд , Билл де Ора , Майкл Хайгард

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT