Книга: C# для профессионалов. Том II
Интерфейсы
Интерфейсы
Интерфейсы являются особенностью C#, которая не имеет аналога в ANSI C++, хотя компания Microsoft ввела интерфейсы в C++ с помощью специального ключевого слова. Идея интерфейса развилась из интерфейсов COM, которые предназначены служить контрактом, который указывает, какие методы или свойства реализует объект.
Интерфейс в C# не совсем такой, как интерфейс COM, так как он не имеет связанного с ним GUID, не является производным из IUnknown
и не имеет связанных с ним записей в реестре (хотя можно отобразить интерфейс C# на интерфейс COM). Интерфейс C# является просто множеством определений функций и свойств. Он может рассматриваться как аналог абстрактного класса и определяется с помощью синтаксиса аналогичного класса.
interface IMyInterface {
void MyMethod(int X);
}
Можно заметить, однако, следующие синтаксические различия с определением класса:
? Методы не имеют модификаторов доступа.
? Методы никогда не реализуются в интерфейсе.
? Методы не объявляются виртуальными или явно абстрактными. Выбор методов принадлежит классу, который реализует этот интерфейс.
Класс реализует интерфейс, наследуя из него. Класс может быть производным только от одного класса, но от любого числа интерфейсов. Если класс реализует интерфейс, то он должен предоставить реализации всех методов, определенных этим интерфейсом.
class MyClass : MyBaseClass, IMyInterface, IAnotherInterface // и т.д.
{
public virtual void MyMethod(int X) {
// реализация
}
// и т.д.
В этом примере выбрана реализация MyMethod
как виртуального метода с открытым доступом.
Интерфейсы могут также выводиться из других интерфейсов, и в этом случае производный интерфейс содержит свои собственные методы, а также методы базового интерфейса.
interface IMyInterface : IBaseInterface
Можно проверить, что объект реализует интерфейс, используя либо оператор is
, либо оператор as
для преобразования его в этот интерфейс. Альтернативно можно преобразовать его напрямую, но в этом случае будет получено исключение, если объект не реализует интерфейс, поэтому этот подход годится только в том случае, если известно, что преобразование пройдет успешно. Можно использовать полученную таким образом ссылку на интерфейс, чтобы вызывать методы на этом интерфейсе (реализация будет предоставляться экземпляром класса).
IMyInterface MyInterface;
MyClass Mine = new MyClass();
MyInterface = Mine as IMyInterface;
if (MyInterface != null) MyInterface.MyMethod(10);
Основные применения интерфейсов следующие:
? Взаимодействовать и устанавливать обратную совместимость с компонентами COM.
? Служить в качестве контракта для других классов .NET. Интерфейс может использоваться для указания, что класс реализует некоторые свойства. Например, цикл C# foreach работает
внутренне, проверяя, что класс, в котором он используется, реализует интерфейс IEnumerate
, и вызывая затем методы, определенные этим интерфейсом.
- 5.21 IP-адреса, интерфейсы и множественное пребывание
- Множественные интерфейсы и имена методов
- 2.2 Интерфейсы IDE, EIDE и АТА
- 7.5 Программные интерфейсы приложений для адаптеров шины
- Абстрактные базы как двоичные интерфейсы
- Интерфейсы накопителей на жестких магнитных дисках
- Глава 10 Интерфейсы компьютерных сетей
- 8.4.4. Цифровые интерфейсы P&D, DVI и DFP
- 8.3.2. Последовательные интерфейсы
- 15.1.3. XPath и другие интерфейсы
- ГЛАВА 19 Усовершенствования и интерфейсы SAP
- Многослойные интерфейсы