Абстракции текут как не знаю что...
1. Рекомендуют реализовывать IDisposable для всех классов-потомков, унаследованных от классов, реализующих IDisposable. А также, если класс содержит поля с типами, реализующими IDisposable. У меня, конечно, мало опыта, но что-то мне подсказывает, что для более-менее сложной системы это будут чуть менее, чем все классы. Да?
2. Реализая освобождения ресурсов сложнее и гораздо сложнее, чем в том же С++, который, якобы, в плане управления памятью сложнее, чем С#. Ведь в C# надо реализовать Dispose и финализаторы-деструкторы
со сложными правилами и порядком их вызова, а в С++ - только деструкторы и без всякой возни с Dispose(bool) и кучей правил, типа "X DO NOT make the parameterless Dispose method virtual.". Ребята, так получается, что в С++ с памятью работать проще, если программа выходит за рамки своей "Hello World"-песочницы (что происходит почти всегда в нормальных приложениях) и начинает работать как взрослая, потребляя неуправляемые ресурсы и работая с другими приложениями?
3. Сборщик мусора сам заботится об освобождении ресурсов, но вдруг и внезапно это стало "bad coding style". Правильные пацаны всё делают руками и бьют по рукам тех, кто доверяет сборщику мусора. Поэтому у правильных пацанов в конторах все ресурсы освобождаются руками и код пестрит вызовами Dispose и using.
Я не понимаю - кто-нибудь, объясните мне - в чём тогда заключается плюс сборщика мусора, если в любой более-менее сложной программе надо памятью управлять самому? Сборщик мусора может управлять только самыми базовыми объектами, что даёт минимальные преимущества. И эти преимущества с лихвой покрываются сложностью и количеством правил "правильного" управления неуправляемыми ресурсами в C#.
Жду ваших рассуждений по этому поводу. Например, "да, так и есть - нас наипали, возвращаемся все на С++".