这绝对是主观的,但我想尽量避免它变成争论。我认为如果人们恰当地对待它,这将是一个有趣的问题。

这个问题的想法来自于我对“你最讨厌的语言的哪五件事?”问题的回答。我认为c#中的类在默认情况下应该是密封的——我不会把我的理由放在这个问题上,但我可能会写一个更完整的解释来回答这个问题。我对评论中的讨论热度感到惊讶(目前有25条评论)。

那么,你有什么有争议的观点?我宁愿避免那些基于相对较少的基础而导致相当宗教的事情(例如,大括号放置),但例如可能包括“单元测试实际上并没有多大帮助”或“公共字段确实是可以的”之类的事情。重要的是(至少对我来说)你的观点背后是有理由的。

请提出你的观点和理由——我鼓励人们投票给那些有充分论证和有趣的观点,不管你是否恰好同意这些观点。


当前回答

实现IDisposable的类库指南是错误的。

我不经常分享这一点,但我相信IDisposable的默认实现的指导是完全错误的。

我的问题不是Dispose的过载,然后从终结器中删除项目,而是我鄙视终结器中释放托管资源的调用。我个人认为应该抛出异常(是的,在结束器线程上抛出异常会带来很多麻烦)。

其背后的原因是,如果您是IDisposable的客户端或服务器,那么您不能简单地将对象放置在那里等待最终确定。如果您这样做了,这是一个设计/实现缺陷(取决于它是如何放置的和/或它是如何暴露的),因为您没有意识到您应该意识到的实例的生命周期。

我认为这种类型的错误/错误是在竞争条件/资源同步的水平上。不幸的是,通过调用Dispose的重载,该错误永远不会实现。

编辑:我写了一篇关于这个主题的博客文章,如果有人感兴趣的话:

http://www.caspershouse.com/post/A-Better-Implementation-Pattern-for-IDisposable.aspx

其他回答

SESE (Single Entry Single Exit)不是法律

例子:

public int foo() {
   if( someCondition ) {
      return 0;
   }

   return -1;
}

vs:

public int foo() {
   int returnValue = -1;

   if( someCondition ) {
      returnValue = 0;
   }

   return returnValue;
}

我和我的团队发现,在很多情况下,一直遵守这一点实际上会适得其反。

现代c++是一门美丽的语言。

我说出来了。很多人真的很讨厌c++,但说实话,我发现现代c++与STL/Boost风格的编程在大多数时候是一种非常有表现力、优雅和令人难以置信的高效语言。

我认为大多数讨厌c++的人都是基于使用OO的糟糕经历。c++在面向对象方面做得不是很好,因为多态性通常依赖于堆分配对象,而且c++没有自动垃圾收集。

但c++真正的亮点在于泛型库和函数式编程技术,这使得构建难以置信的大型、高度可维护的系统成为可能。很多人说c++试图做所有事情,但最终什么都做不好。我可能同意它在面向对象方面不如其他语言,但它在泛型编程和函数编程方面比任何其他主流的基于c的语言都要好。(c++ 0x只会进一步强调这一事实。)

我也很欣赏c++如何让我在必要时获得底层,并提供对操作系统的完全访问。

加上RAII。认真对待。当我用其他c语言编程时,我真的很想念析构函数。(不,垃圾回收不会使析构函数无用。)

PHP文件中过多的HTML:有时是必要的

PHP文件中Javascript过多:触发猛禽攻击

虽然我很难弄清楚在echo和?>< ?php 'ing html之间的所有切换(毕竟,php只是html的处理器),但添加的一行又一行javascript使它完全无法维护。

人们必须明白这一点:它们是两种独立的编程语言。选择一种作为你的主要语言。然后继续寻找一种快速、干净、易于维护的方法,使你的主要语言包括第二语言。

你之所以总是在PHP、Javascript和HTML之间切换,是因为你对这三种语言都不在行。

好吧,也许这并不是很有争议。我的印象是,这是一个普遍的沮丧发泄话题:)

调试器是一种拐杖。

它的争议如此之大,以至于连我都不像以前那么相信它了。

缺点:我花了更多的时间来跟上其他人的大量代码,所以任何有助于“我是如何到达这里的”和“发生了什么”的事前或事后分析都是有帮助的。

教授:然而,我很高兴地支持这样的观点,如果你不理解你自己开发的代码或你已经熟悉的代码的这些问题的答案,把所有的时间都花在调试器上并不是解决方案,这是问题的一部分。

在点击“发布你的答案”之前,我快速地检查了一下这个确切的短语,结果发现我不是唯一一个持有这种观点或使用这个短语的人。我在Fog Creek软件论坛上找到了关于这个问题的长时间讨论,其中引用了包括Linus Torvalds在内的各种名人作为著名的支持者。

可读性是代码最重要的方面。

甚至比正确性更重要。如果它是可读的,就很容易修复。它也很容易优化,容易改变,容易理解。希望其他开发者也能从中学到一些东西。