Смысл интерфейса в том, чтобы определить контракт, которого придерживается ваш реализующий класс.
Это позволяет вам программировать в спецификации, а не в реализации.
Представьте, что у нас есть следующее:
public class Dog
{
public string Speak()
{
return "woof!";
}
}
И хотим посмотреть, что он говорит:
public string MakeSomeNoise(Dog dog)
{
return dog.Speak();
}
Мы действительно не извлекаем выгоду из Интерфейса, однако, если бы мы также хотели видеть, какого родаИз-за шума, производимого Cat, нам понадобится другая перегрузка MakeSomeNoise (), которая может принять Cat, однако с интерфейсом мы можем иметь следующее:
public interface IAnimal
{
public string Speak();
}
public class Dog : IAnimal
{
public string Speak()
{
return "woof!";
}
}
public class Cat : IAnimal
{
public string Speak()
{
return "meow!";
}
}
И выполнить их оба через:
public string MakeSomeNoise(IAnimal animal)
{
return animal.Speak();
}