До выхода C # 4.0 я был очень взволнован ковариацией и контравариантностью. Это потворствовало моей любви к теоретической правильности!
Однако теперь, когда это вышло, и я вернулся к написанию нормального, повседневного, скучного кода, Я начинаю задаваться вопросом: я когда-либо использовал это еще? И я замечаю, что я не использовал это сознательно. Ни один из интерфейсов или делегатов, которые я определил с тех пор, не выиграл от этого.
Существует только один единственный случай, в котором я позже обнаружил, что я невольно использовал ковариацию, но это очень тонкий и я мог бы также иметь не заметил этого. Представьте себе X
является базовым классом, а Y
является его потомком:
if (enumerableOfYs.Contains(variableOfTypeX))
Существуют ли какие-нибудь интересные или захватывающие примеры, когда кто-нибудь из вас, ребята, использовал ковариацию или контравариантность в реальном вариант жизни, не надуманный, и он действительно спас день, будучи удивительно «правильным»?
Я использовал C# около трех лет, и я помню только "отсутствующие" функции дисперсии, может быть, один или два раза.
Возможно, теперь, когда они есть в языке, я найду больше возможностей воспользоваться ими, но я думаю, что в лучшем случае это «второстепенные» функции.
(Мне интересно посмотреть, какие ответы появятся здесь.)
Такие функции, как ковариантность и контравариантность, на самом деле не спасают положение. Скорее, при правильном использовании они облегчают последующее обслуживание. Таким образом, это очень похоже на константную корректность в C++. Это не добавляет мощности, но правильно написанный код использует ее, и это значительно упрощает работу с системой.
ПРИМЕЧАНИЕ. Я еще не использовал его, потому что только что обновился до VS 2010.