Здравствуйте, Sinclair, Вы писали:
S>Не, никакой бури не вызывает.
Это у тебя не вызывает, а я говроил не про тебя. В соседней ветке ещё как вызывает.
S>Я говорю о том, что предлагаемый вариант ролей не шибко помогает.
Согласен. Просто вся ветка перешла от обсуждения полезности «ролей», к обсуждению полезности абстракции моноида.
S>Рулится прямо сейчас:
Всё так.
S>var m = new M();
S>С учётом того, что статические интерфейсы ты ничем не параметризуешь, дефолтного конструктора вполне достаточно.
Даже конструктор не нужен (его констрейнт и вызов), достаточно default(M) с констрейнтом struct. В той статье «Concept C#: Type Classes for the Masses» именно такой подход рассматривался.
S>Вся разница — код работает прямо сейчас, не дожидаясь C# 12.
Всё верно! (Только я в своих API предпочитаю по старинке протаскивать такие policies явно — более гибко. Но действительно, можно и не параметром метода, а параметром дженерика с самостоятельным инстанцированием через default(T).)
S>С моей точки зрения, для обобщённой операции сложения использовать оператор "+" — баловство.
Категорически согласен.