Интерфейсы языка C#, отличие от С++
Языки Java и C# не поддерживают множественное реализационное наследование, как, скажем С++. Интерфейс в С#, в отличии от интерфейса в С++, не является абстрактным классом. Интерфейс C# — именованый набор методов, свойств и событий которые должны быть реализованы классом, поддерживающим данный интерфейс. Интерфейс не является пользовательским типом данных; нельзя создать экземпляр интерфейса, следовательно, интерфейс не может содержать данных, в отличие от С++.
Все методы интерфейса считаются публичными, соответсвено методы, реализующие интерфейс, всегда должны иметь уровень доступа public, в отличие от C++, где ничто не мешает определить виртуальный метод c уровнем доступа protected. Попытка явно указать уровень доступа в интерфейсе C# приведет к ошибке компиляции.
public interface IListener { int State { get; } void Notify(int code); }
.class interface public abstract auto ansi Interfaces.IListener
{
.method public hidebysig newslot specialname abstract virtual
instance int32 get_State() cil managed
{
}
.method public hidebysig newslot abstract virtual
instance void Notify(int32 code) cil managed
{
}
.property instance int32 State()
{
.get instance int32 Interfaces.IListener::get_State()
}
}
Об особенностях реализации интерфейсов в следующей главе.