Yurijnd.com
Четверг, 06.02.2025, 21:04
Меню сайта

Вход на сайт

Поиск

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Интерфейсы (Руководство по программированию в C#)

    Visual Studio 2013
     

    Интерфейс содержит определения для группы определенного функционала, который класс или структура могут реализовывать

    С помощью интерфейсов можно, например, включить поведение из нескольких источников в классе. Эта возможность важна в C#, поскольку язык не поддерживает множественное наследование классов. Кроме того, необходимо использовать интерфейс, если требуется имитировать наследование для структур, поскольку они фактически не могут наследоваться из других структур или классов.

    Определен интерфейс с помощью ключевого слова интерфейс, как показано в следующем примере.

     
    interface IEquatable<T>
    {
     bool Equals(T obj);
    }
    

    Любой класс или структура, реализующие интерфейс IEquatable<T>, должны содержать определение метода Equals, который соответствует сигнатуре, которую определяет интерфейс. В результате можно рассчитывать на то, что класс, реализующий интерфейс IEquatable<T>, будет содержать метод Equals, с которым экземпляр класса может определить, является ли он равным другому экземпляру класса.

    Определение IEquatable<T> не предоставляет реализацию Equals. Интерфейс определяет только сигнатуру. В этом смысле интерфейс в C# аналогичен абстрактному классу, в котором все методы являются абстрактными. Однако класс или структура может реализовывать несколько интерфейсов, но класс может наследовать только от одного класса, абстрактного или нет. Таким образом, с помощью интерфейсов можно включить расширение функциональности из нескольких источников в классе.

    Дополнительные сведения об абстрактных классах см. в разделе Абстрактные и запечатанных классов и членов класса.

    Интерфейсы могут содержать методы, свойства, события, индексаторы или любое сочетание этих типов 4 элементов. Ссылки на примеры см. в разделе Связанные разделы. Интерфейс не может содержать константы, поля, оператор, конструктор, деструктор экземпляра, или типы. Члены интерфейса автоматически открыты, и они не могут включать иные модификаторы доступа. Члены также не могут быть статический.

    Для реализации члена интерфейса соответствующий член класса должен быть открытым, нестатическим, и иметь то же имя и сигнатуру, что и член интерфейса.

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

    В следующем примере показана реализация интерфейса<T> IEquatable. Класс, реализующий Car, должен предоставить реализацию метода Equals.

     
    public class Car : IEquatable<Car>
    {
     public string Make {get; set;}
     public string Model { get; set; }
     public string Year { get; set; }
    
     // Implementation of IEquatable<T> interface 
     public bool Equals(Car car)
     {
     if (this.Make == car.Make &&
     this.Model == car.Model &&
     this.Year == car.Year)
     {
     return true;
     }
     else 
     return false;
     }
    }
    

    Свойства класса и индексаторы могут определять дополнительные методы доступа для свойства или индексатора, определенный в интерфейсе. Например, интерфейс может объявить свойство, которое имеет доступ получение. Класс, реализующий интерфейс может объявлять то же свойство как с get, так и с доступом набор. Если же свойство или индексатор использует явную реализацию, методы доступа должны совпадать. Дополнительные сведения о конкретной реализации см. в разделах Явная реализация интерфейса (Руководство по программированию в C#) и Свойства интерфейса (Руководство по программированию на C#).

    Интерфейсы могут реализовывать другие интерфейсы Класс может содержать несколько раз интерфейса через базовые классы, которые он наследует или через другие интерфейсы, которые реализуют интерфейсы. Однако класс может предоставить реализацию интерфейса только один раз и только если класс объявляет интерфейс как часть определения класса (class ClassName : InterfaceName). Если интерфейс наследуется, поскольку его унаследованные базовый класс, реализующий интерфейс, базовый класс предоставляет реализацию членов интерфейса. Однако производный класс может повторно реализовать член интерфейса вместо использования унаследованной реализации.

    Базовый класс также реализовать члены интерфейса с помощью виртуальных элементов. В этом случае производный класс может изменить поведение интерфейса путем переопределения виртуальных членов. Дополнительные сведения о виртуальных членах см. в разделе Полиморфизм.

    Общие интерфейсы

     

    Интерфейс имеет следующие свойства.

    • Интерфейс похож на абстрактный базовый класс. Любой класс или структура, реализующие интерфейс должны реализовать все его члены.

    • Невозможно создать экземпляр интерфейса напрямую. Его члены реализованы всеми классами или структурами, реализующими интерфейс.

    • Интерфейсы могут содержать события, индексаторы, методы и свойства в качестве членов.

    • Интерфейсы не содержат реализации методов.

    • Класс или структура может реализовывать несколько интерфейсов. Класс может наследовать базовый класс и реализовать один или несколько интерфейсов.

    Copyright MyCorp © 2025
    Сделать бесплатный сайт с uCoz