Интерфейсы и с чем их едят

В этой статье буду рассмотрены основные моменты при использовании интерфейсов.
Перед прочтением рекомендуется ознакомиться с наследованием классов и преобразованиями типов объекта.
Статья
23 9 269
28
Doc, тут люди не понимают зачем нужен полиморфизм а ты про контракты и состояния
ну а вообще если говорить простым языком (т.е. для полных нубов) то интерфейсы нужны для того чтобы убедится что класс имеет реализацию необходимых методов
29
Множественное наследование просто побочный эффект. Интерфейс просто объявляет контракт. Важное свойство интерфейса в том что он не имеет собственного состояния.
9
Хм, а давайте подумаем, почему Майкрософт сделали и интерфейс IComparer, и класс Comparer. Ну да, наверное, чтобы в случае класса его наследовали когда хочется унаследовать именно класс (настроение такое - хочу наследовать классы сегодня!). А в случае интерфейса - когда, увы, уже наследуешь один класс и для второго класса места нет, поэтому есть возможность наследовать интерфейс.
Ведь вся суть использования интерфейсов именно в том, что именно для них поддерживается множественное наследование, да.
8
GeneralElConsul, класс наследуется один, интерфейсов может быть множество, миксинов в шарпе нет, я не понимаю, с чего тут разводить дискуссию.
9
Конкретно то, что вы в вверху описали можно сделать и наследованием класса.
25
Как не видел смысла в интерфейсах, так и не вижу. Там где нужна та или иная реализация в классе, она там и будет. Даже если несколько объектов, должны уметь делать что-то одно, это будет объявлено и без интерфейсов.
Ясно-понятно.
29
Интерфейсы можно конечно заменить одним помойным абстрактным классом, но по мне - это уже признак говнаря, если дело касается чего-то серьезного с использованием solid, тестирования итд
Со временем это понимается
28
как пример интерфейсы юзаются в шаблоне observer/listener
да и вообще большинство шаблонов проектирования использует интерфейсы
8
Эргалон, иногда объекты слишком разные, поэтому наследование классов не подходит, но в то же время за счет наследования интерфейсов можно будет хранить их в одних массивах/коллекциях, наделять их неким сходством.
Как-то так
public interface IDrawable {
	void Draw(Graphics render);
}

public class Rectangle : IDrawable {
	...
	public void Draw(Graphics render) {
		render.DrawRectangle(pen,x,y,w,h);
	}
}

public class Shape : IDrawable {
	...
	public void Draw(Graphics render) {
		render.DrawEllipse(pen,x,y,w,h);
	}
}

...
List<IDrawable> gameObjects;
....
Graphics g = Graphics.FromImage(canvas);
while (gameLoop) {
	g.Clear(color);
	foreach (var go in gameObjects) {
		go.Draw(g);
	}
}
При этом разные элементы могут наследовать от разных классов, какой-нибудь Label от UI, например, но объединяет их всех интерфейс IDrawable т.е. возможность прорисовки.
4
Как не видел смысла в интерфейсах, так и не вижу. Там где нужна та или иная реализация в классе, она там и будет. Даже если несколько объектов, должны уметь делать что-то одно, это будет объявлено и без интерфейсов.
Никто и не обязывает тебя пользоваться ими. Просто видимо ты ещё не нашёл такой задачи , где будут полезными только интерфейсы.
Ну хотя бы с IEnumerator ты хоть раз имел дело =)