Интерфейсы (Руководство по программированию в C#)
Интерфейс содержит определения для группы определенного функционала, который класс или структура могут реализовывать
Определен интерфейс с помощью ключевого слова интерфейс, как показано в следующем примере.
interface IEquatable<T> { bool Equals(T obj); }
Определение IEquatable<T> не предоставляет реализацию Equals. Интерфейс определяет только сигнатуру.
Дополнительные сведения об абстрактных классах см. в разделе Абстрактные и запечатанных классов и членов класса.
Интерфейсы могут содержать методы, свойства, события, индексаторы или любое сочетание этих типов 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#).
Базовый класс также реализовать члены интерфейса с помощью виртуальных элементов. В этом случае производный класс может изменить поведение интерфейса путем переопределения виртуальных членов. Дополнительные сведения о виртуальных членах см. в разделе Полиморфизм.
Общие интерфейсы
Интерфейс имеет следующие свойства.
-
Интерфейс похож на абстрактный базовый класс. Любой класс или структура, реализующие интерфейс должны реализовать все его члены. -
Невозможно создать экземпляр интерфейса напрямую. Его члены реализованы всеми классами или структурами, реализующими интерфейс.
-
Интерфейсы могут содержать события, индексаторы, методы и свойства в качестве членов.
-
Интерфейсы не содержат реализации методов.
-
Класс или структура может реализовывать несколько интерфейсов. Класс может наследовать базовый класс и реализовать один или несколько интерфейсов.