Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_Prog_Guide.doc
Скачиваний:
16
Добавлен:
16.11.2019
Размер:
6.22 Mб
Скачать

Интерфейсы

Интерфейсы определяются с помощью ключевого слова interface. Пример.

interface IComparable

{

int CompareTo(object obj);

}

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

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

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

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

---

Для реализации члена интерфейса соответствующий член класса должен быть открытым и не статическим, он должен обладать таким же именем и сигнатурой, как член интерфейса. Свойства и индексаторы класса могут определить дополнительные методы доступа для свойства или индексатора, определенного в интерфейсе. Например, интерфейс может объявлять свойство с методом доступа get, но класс, реализующий интерфейс, может объявлять это же свойство с методами доступа get и set. Если же свойство или индексатор использует явную реализацию, методы доступа должны совпадать.

Interfaces and interface members are abstract; interfaces do not provide a default implementation. For more information, see Abstract and Sealed Classes and Class Members.

The IComparable interface announces to the user of the object that the object can compare itself to other objects of the same type, and the user of the interface does not have to know how this is implemented.

Interfaces can inherit other interfaces. It is possible for a class to inherit an interface multiple times, through base classes or interfaces it inherits. In this case, the class can only implement the interface one time, if it is declared as part of the new class. If the inherited interface is not declared as part of the new class, its implementation is provided by the base class that declared it. It is possible for a base class to implement interface members using virtual members; in that case, the class inheriting the interface can change the interface behavior by overriding the virtual members. For more information about virtual members, see Polymorphism.

Interfaces Overview

An interface has the following properties:

  • An interface is like an abstract base class: any non-abstract type inheriting the interface must implement all its members.

  • An interface cannot be instantiated directly.

  • Interfaces can contain events, indexers, methods and properties.

  • Interfaces contain no implementation of methods.

  • Classes and structs can inherit from more than one interface.

  • An interface can itself inherit from multiple interfaces.

Интерфейсы и члены интерфейсов являются абстрактными. Интерфейсы не имеют реализации по умолчанию.

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

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