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

В этой статье буду рассмотрены основные моменты при использовании интерфейсов.
Перед прочтением рекомендуется ознакомиться с наследованием классов и преобразованиями типов объекта.
Статья
23 9.3K
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 ты хоть раз имел дело =)
29
Каким образом это будет объявлено без интерфейсов?
6
Как не видел смысла в интерфейсах, так и не вижу. Там где нужна та или иная реализация в классе, она там и будет. Даже если несколько объектов, должны уметь делать что-то одно, это будет объявлено и без интерфейсов.
19
спасибо за статью, просто и по полочкам, квик гайд фо даммиз лайк ми. Более развернуто, чем в "с# за 31 день"
29
RealizationABC
Может все-таки Implementation?
Да. Исправил.
35
А чего никто не комментирует?)