Re[13]: Breaking change
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.12.22 16:11
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Тут интересно посмотреть на его реализацию:

Да, именно поэтому я привёл ссылку на неё.
Там проблема даже не в том, чтобы убрать эту "срань", а в том, что нет способа добавить в эту срань даункаст к чему-то ещё, что позволит обойтись без итерирования.
Например, ImmutableList реализует IReadOnlyCollection, а не ICollection — и всё, приплызд.

НС>Это ты слишком оптимистичен. Мы вот уже год пытаемся с 3.1 слезть, но пока только отдельные сервисы переползли. Геморой начался с апгрейда SDK, но его со второго подхода удалось победить (на первом подходе что то сломалось у билд-агентов, а у девопсов, как обычно, есть более срочные задачи чтобы с этим разбираться). Потом ждали когда сборку базовых образов в порядок приведу, чтобы легко можно было добавить версию с 6.0. Потом что то в ASP.NET отломалось (без breaking changes не обошлось). Вобщем, уже 7.0 зарелизен, а мы все еще на 6.0 переползаем с 3.1.

НС>С FW да, попроще было. Но и там МС подкладывал свинью в виде совместимости со старыми версиями ОС. И продолжает подкладывать — 4.8.1 требует WIn11/WinServer2019. Последнее может быть большой проблемой, ибо работает — не трожь.
Ок, согласен, погорячился.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[11]: Diamond inheritance
От: Ночной Смотрящий Россия  
Дата: 16.12.22 17:03
Оценка:
Здравствуйте, Codealot, Вы писали:

НС>>Это прям свежий звук в проектировании софта, дизайн для тех кто опытнее и талантливее.

C>Особый дизайн не нужен, просто не мешай.

Это так не работает. Если что то можно сделать неправильно, оно обязательно будет сделано неправильно (если, конечно, твоим кодом пользуются другие люди). После чего ты будешь расхлебывать свою ориентацию на более опытных и талантливых по полной.
Что особенно забавно, даже если ты пишешь код исключительно для себя (а кто может быть опытнее и талантливее себя любимого?), то если вдруг такое случится, что ты вернешься к этому коду через годик-другой, то внезапно окажется что ты не тот опытный и талантливый, на которого был рассчитан тот дизайн. И, в лучшем случае, это даст тебе возможность стать чуть опытнее. А в худшем через год-два oops!, I did it again.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[12]: Breaking change
От: karbofos42 Россия  
Дата: 16.12.22 17:07
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Статический хелпер не обеспечимвает полиморфизма.


Он и не должен это делать
Кто не хочет писать свою оптимальную реализацию или его устраивает некая стандартная, в реализации метода просто вызывает этот хелпер.
Re[9]: Diamond inheritance
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.12.22 17:52
Оценка: :)
Здравствуйте, Codealot, Вы писали:

C>Это у тебя тяжелый случай синдрома "чем больше абстракций, тем лучше".


У меня синдромов нет. Если абстракции на уровне типов не нужны я и функциями могу прекрасно обойтись. И интерфейсы использовать не буду, если они не нужны.

А вот у тебя явные проблемы в вопросе абстракций есть, что и послужило причиной к этому флэйму.

C>В C# нет множественного наследования реализаций.


Да. И дефолтные члены интерфейсов этого не изменяют.

C>Да, ни у кого. В том числе у тех, кто намного опытнее и талантливее тебя.


И у таких тоже. Но это, явно, не твой случай.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 16.12.2022 20:49 VladD2 . Предыдущая версия .
Re[9]: Diamond inheritance
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 16.12.22 18:24
Оценка:
Здравствуйте, Codealot, Вы писали:

C>В C# нет множественного наследования реализаций.


Не совсем. В Delphi для ком интерфейса есть директива Implements. То есть за реализацию интерфейса отвечало поле объекта.
С приходом SG можно генерить не только реализацию интерфейса, но и методы и свойства класса типа поля.
По сути это и будет аналогом множественного наследования C++
и солнце б утром не вставало, когда бы не было меня
Re[13]: Breaking change
От: Ночной Смотрящий Россия  
Дата: 16.12.22 18:59
Оценка:
Здравствуйте, karbofos42, Вы писали:

K>Кто не хочет писать свою оптимальную реализацию или его устраивает некая стандартная, в реализации метода просто вызывает этот хелпер.


Я тут рядом привел исходный код Enumerable.Count(). Сможешь его переписать со статическим хелпером?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[12]: Diamond inheritance
От: Codealot Земля  
Дата: 16.12.22 20:46
Оценка: :))
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Это так не работает. Если что то можно сделать неправильно, оно обязательно будет сделано неправильно (если, конечно, твоим кодом пользуются другие люди). После чего ты будешь расхлебывать свою ориентацию на более опытных и талантливых по полной.


Я уже понял, что твоя основная задача — прикрыть себе задницу

НС>А в худшем через год-два oops!, I did it again.


Ни разу не случалось.
Ад пуст, все бесы здесь.
Re[10]: Diamond inheritance
От: Codealot Земля  
Дата: 16.12.22 20:46
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>У меня синдромов нет. Если абстракции на уровне типов не нужны я и функциями могу прекрасно обойтись. И интерфейсы использовать не буду, если они не нужны.


Сам написал "раз ты завёл интерфейсы, то работать с классами иже не имеешь права", никто за язык не тянул.
Путаешься в показаниях

VD>А вот у тебя явные проблемы в вопросе абстракций есть, что и послужило причиной к этому флэйму.


Ага-ага. Кто-то решил пихать в интерфейсы функции, которым там не место, и почему-то ему взбрело в голову, что это и есть основной вариант использования интерфейсов. А проблемы почему-то у меня

VD>И у таких тоже.


Да, и и таким тоже ты будешь ставить палки в колеса.
Ад пуст, все бесы здесь.
Re[3]: default interface methods. Какой все же бред.
От: Codealot Земля  
Дата: 16.12.22 21:02
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Судя по твоей критике ты пока что до этих фич не дорос.


Тут есть два варианта — либо не догнал, либо перегнал. Все будет нравиться только в том случае, если ты находишь ровно на том же уровне.
И да, к тебе это тоже относится.
Ад пуст, все бесы здесь.
Re[14]: Breaking change
От: karbofos42 Россия  
Дата: 17.12.22 04:51
Оценка: :)
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Я тут рядом привел исходный код Enumerable.Count(). Сможешь его переписать со статическим хелпером?


Нет.
А ты сможешь его переписать, не превращая IEnumerable в IReadOnlyCollection?
Re: default interface methods. Какой все же бред.
От: xpalex  
Дата: 19.12.22 01:20
Оценка: :)
C>

C> static void Main(string[] args)
C> {
C> var obj = new TestClass();
C> obj.Method(); // error
C> }

C> interface ITest
C> {
C> void Method()
C> {
C> }
C> }

C> class TestClass : ITest
C> {
C> }


  static void Main (string[]args)
  {
    var obj = new TestClass();
      obj.Method(); // error
  }
  interface ITest
  {
    void Method();
  }

  class TestClass:ITest
  {
      void ITest.Method() {}
  }


Есть пять областей видимости методов: public, protected, internal, private и реализации интерфейсов.
Вызывать у объекта мы можем только "видимые" методы. В вашем примере публичные.
Есть соглашение, что публичный метод с совпадающей сигнатурой может использоваться как метод реализации интерфейса.
Но почему решили, что должно быть верно обратное?
Re[13]: Breaking change
От: Codealot Земля  
Дата: 20.12.22 16:34
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Это про добавление методов без ломки совместимости.


Что в общем то полный изврат, но кого волнуют такие мелочи?
Ад пуст, все бесы здесь.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.