Интерфейс — это группа из ноля или более абстрактных методов, т. е. таких методов, у которых нет реализации по умолчанию, но которые реализуются в классах или структурах. Интерфейсы могут также содержать свойства и события, но методы распространены гораздо шире.
Интерфейс задает определенное соглашение между типом и его пользователями. Так, многие классы в пространстве имен System.Collections порождены от интерфейса /Enumerable. В нем определены методы итерации по элементам набора (collection). Поскольку классы-наборы FCL реализуют fEnumerable, их можно указывать в конструкции foreacb языка С#. Во время исполнения сгенерированный из foreach код применяет метод GetEnumerator интерфейса ШпшпегаЫе, чтобы организовать итерацию по содержимому набора.
Интерфейсы определяются ключевым словом interface языка С#:
interface ISecret
{
void Encrypt (byte[] inbuf, out byte[] outbuf, Key key);
void Unencrypt (byte[] inbuf, out byte[] outbuf, Key key);
}
Класс или структура, которым нужно реализовать интерфейс, просто определяются как его производные и наполняют его методы конкретной реализацией:
class Message : ISecret
{
public void Encrypt (byte[] inbuf, out byte[] outbuf, Key key)
{
---
}
public void Unencrypt (byte[] inbuf, out byte[] outbuf, Key key)
{
---
}
}
Для выяснения, реализует ли объект заданный интерфейс, в С# служит ключевое слово is. Пусть объект msg реализует интерфейс ISecret, тогда в этом примере is возвратит значение true; иначе вернется false:
if (msg is ISecret) {
ISecret secret = (ISecret) msg;
secret. Encrypt (...);
}
Чтобы одним оператором протестировать наличие интерфейса у объекта и привести объект к типу интерфейса, применяется ключевое слово as.
Похожие статьи: