Интерфейс содержит только сигнатуры методов, свойств, событий или индексаторов. Класс, реализующий интерфейс, должен реализовывать члены интерфейса. Члены интерфейса определяются так же, как и члены класса, за исключением нескольких важных отличий:
— модификаторы доступа (открытые, частные, защищенные или внутренние) не допускаются — все члены интерфейса неявно общедоступны.
— Члены интерфейса не могут содержать тела кода.
— Интерфейсы не могут определять члены полей.
— Члены интерфейса не могут быть определены с помощью ключевых слов static, виртуальный,
абстрактный или запечатанный.
— Члены определения типа запрещены.

В .NET множественное наследование напрямую не поддерживается, поскольку класс может наследовать только от одного класса, но «интерфейс» как класс может реализовывать несколько интерфейсов. Класс или структура может поддерживать столько интерфейсов, сколько необходимо, тем самым поддерживая (по сути) несколько поведения. Поскольку интерфейсы должны быть реализованы производными структурами и классами, они определяют контракт.

Например, если класс foo реализует интерфейс IDisposable, он гарантирует наличие метода Dispose(), который является единственным членом интерфейса IDisposable. Любой код, который хочет использовать класс foo, может проверить, реализует ли класс foo IDisposable. Когда ответ верен, код знает, что может вызывать foo.Dispose().

Интерфейс IStudent{
void DeleteStudentDetails(int studentID);
}

Class Student :IStudent{
void DeleteStudentDetails(int studentID){
//удалить код сведений о студенте
}
}

Интерфейсы полезны тем, что — в отличие от абстрактных классов — они позволяют полностью отделить детали реализации от предоставляемых услуг.В качестве реального примера рассмотрим «интерфейс», который представляет собой электрическую розетку. То, как электроэнергия попадает в розетку, является деталью реализации: она может генерироваться химической, ядерной или солнечной энергией; генератор может находиться в соседней комнате или далеко; и так далее. Розетка обеспечивает «контракт»: она соглашается подавать определенное напряжение на определенной частоте, а взамен требует, чтобы устройство, использующее этот интерфейс, предоставляло совместимую вилку. Устройство не должно заботиться о деталях реализации, обеспечивающих подачу питания к розетке; все, о чем ему нужно беспокоиться, это наличие совместимого штекера.

Они отлично подходят для создания архитектур типа plug-n-play, в которых компоненты могут быть заменены по желанию. Поскольку все взаимозаменяемые компоненты реализуют один и тот же интерфейс, их можно использовать без дополнительного программирования.

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

Способность типов преобразовывать свои экземпляры в другой тип, обеспечиваемая интерфейсом IConvertible, и способность типов сериализовать себя через интерфейс ISerializable.

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

Пример: у ISalary есть свойство «имя свойства» и метод «Имя метода».

ISalary anEmployee=new Employee().

Код может вызывать методы и свойства, указанные в интерфейсе ISalary, через ссылку anEmployee, например

anEmployee.ИмяМетода();

anEmployee.PropertyName;