Интерфейс -это набор сигнатур методов, семантическая и синтаксическая конструкция в коде программы, используемая для специфицированния услуг, предоставляемых классом или компонентом.
Интерфейс, своего рода стереотип, являющийся аналогом чистого абстрактного класса, в котором запрещена любая реализация.
В имени интерфейса следует начинать с буквы I Это дает возможность другим программистам работающим с вашим кодом понять что это интерфейс.
- Невозможно создать экземпляр интерфейса.
- Интерфейсы и члены интерфейсов являются абстрактными. Интерфейсы не имеют реализации в C#.
- Интерфейс может содержать только абстрактные члены (методы, свойства, события или индексаторы).
- Члены интерфейсов автоматически являются открытыми, абстрактными, и они не могут иметь модификаторов доступа.
- Интерфейсы не могут содержать константы, поля, операторы, конструкторы экземпляром, деструкторы или вложенные типы (интерфейсы в том числе).
- Класс или структура, которые реализуют интерфейс, должны реализовать члены этого интерфейса, указанные при его создании.
- Интерфейс может наследоваться от одного или нескольких базовый интерфейсов.
- Базовый класс также может реализовать члены интерфейса с помощью виртуальных членов. В этом случае производный класс может изменить поведения интерфейса путем переопределения виртуальных членов.
- Если класс реализует два интерфейса, содержащих член с одинаковой сигнатурой, то при реализации этого члена в классе оба интерфейса будут использовать этот член для своей реализации.
- Если члены двух интерфейсов с одинаковой сигнатурой методов должны выполнять различные действия при их реализации, необходимо воспользоваться явной реализацией члена интерфейса-техникой явного указания в имени члена имени интерфейса, которому принадлежит данный член. Это достигается путем включения в имя члена класса имени интерфейса с точкой. Данный член в производном классе будет помечен по умолчанию как скрытый.
Преимущество использования интерфейсов:
- Класс или структура может реализовать несколько интерфейсов (допустимо множественное наследование от интерфейсов).
- Если класс или структура реализует интерфейс, она получает только имена и сигнатуры метода.
- Интерфейсы определяют поведение экземпляров производный классов.
- Базовый класс может обладать ненужным функционалом, полученным от других его базовых классов, чего можно избежать, применяя интерфейсы.
Реализация интерфейсов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
interface IInterface { void Method(); } class MyClass : IInterface { public void Method() { Console.WriteLine("Метод - реализация Интерфейса."); } } class Program { static void Main() { MyClass my = new MyClass(); my.Method(); Console.ReadKey(); } } |
Интерфейсы могут быть реализованы как мы видим в коде выше, и на рисунке ниже:
Однако интерфейсы могут и наследоваться, это происходит когда один интерфейс наследуется от другого: