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

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

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

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


当前回答

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;
}

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

其他回答

启用多次签出 如果我们提高了开发人员的纪律,通过自动合并源代码控制,我们将从这个设置中获得更高的效率。

这不是关于编程的,因为html/css不是编程语言。

表格可以用于布局

CSS和div不能做所有的事情,节省你自己的麻烦,使用一个简单的表,然后在它上面使用CSS。

如果你知道如何编程,你就不适合在表单上放置按钮

这有足够的争议吗?;)

不管我们多么努力,我们几乎不可能对53岁的Doris产生适当的同情,她必须使用我们的订单输入软件。我们根本无法掌握她想象的计算机内部正在发生的事情的心智模式,因为我们不需要想象:我们知道正在发生什么,或者有一个非常好的想法。

交互设计应该由非程序员来完成。当然,这永远不会发生。相反,我对此很高兴;我喜欢UI设计,尽管内心深处我知道我并不适合它。

欲了解更多信息,请阅读《囚犯们在管理精神病院》这本书。请注意,这本书让我心烦意乱,很无礼;如果你是一个关心用户体验的开发人员,这是一篇很难读懂的文章。

如果你只知道一种语言,无论你多么精通,你都不是一个伟大的程序员。

似乎有一种态度认为,一旦你真的擅长c#或Java或其他你开始学习的语言,那么你就只需要这些。我不相信——我学过的每一种语言都教会了我一些关于编程的新东西,我能够把这些东西带回到我的工作中。我认为任何把自己限制在一种语言上的人都永远不会达到他们本可以达到的水平。

对我来说,这也表明缺乏好奇心和实验意愿,这并不一定符合我期望在一个真正优秀的程序员身上找到的品质。

好吧,我说过我会更详细地阐述我的“密封类”观点。我想有一种方法可以展示我感兴趣的答案,那就是给我自己一个答案:)

意见:在c#中,默认情况下类应该是密封的

推理:

There's no doubt that inheritance is powerful. However, it has to be somewhat guided. If someone derives from a base class in a way which is completely unexpected, this can break the assumptions in the base implementation. Consider two methods in the base class, where one calls another - if these methods are both virtual, then that implementation detail has to be documented, otherwise someone could quite reasonably override the second method and expect a call to the first one to work. And of course, as soon as the implementation is documented, it can't be changed... so you lose flexibility.

C# took a step in the right direction (relative to Java) by making methods sealed by default. However, I believe a further step - making classes sealed by default - would have been even better. In particular, it's easy to override methods (or not explicitly seal existing virtual methods which you don't override) so that you end up with unexpected behaviour. This wouldn't actually stop you from doing anything you can currently do - it's just changing a default, not changing the available options. It would be a "safer" default though, just like the default access in C# is always "the most private visibility available at that point."

通过让人们明确表示他们希望人们能够从他们的类中派生,我们将鼓励他们更多地思考这个问题。这也可以帮助我解决我的懒惰问题——虽然我知道我应该密封几乎所有的类,但我很少真的记得这样做:(

对方观点:

我可以看到这样一种说法:可以相对安全地派生没有虚方法的类,而不需要额外的灵活性和通常需要的文档。目前我不确定如何应对这个问题,只能说我相信意外打开类的危害比意外密封类的危害更大。