Интерфейс определяет минимальные требования, которые должен реализовать экземпляр класса. Это выражается через методы.
Например, интерфейс может определить функцию с именем Foo, которая принимает целое число и возвращает логическое значение:
public interface ICanFoo
{
bool Foo(int number);
}
Любой класс, который реализует этот интерфейс, должен также реализовать этот метод:
public class Fooable : ICanFoo
{
public bool Foo(int number)
{
// do something
}
}
Реализация в методе зависит от конкретных классов, которые реализуют интерфейс.
Используя интерфейсы, вы больше не заботитесь о реализации во время компиляции, а скорее о спецификации. Вы можете назвать это так:
ICanFoo myFooable = ...
bool success = fooable.Foo(4);
Фактическим типом fooable может быть любой класс, реализующий ICanFoo, поскольку вы знаете , что ICanFoo всегда будет определять реализацию метода для метода Foo.