代码之家  ›  专栏  ›  技术社区  ›  abhilash

在OOP中默认参数是错误的做法吗?

  •  9
  • abhilash  · 技术社区  · 17 年前

    方法的默认参数是否违反封装?

    在C#中不提供默认参数的原因是什么?

    7 回复  |  直到 17 年前
        1
  •  11
  •   dolgom    6 年前

    我要 this 作为微软的“官方”回答。但是,默认(和命名)参数 C#4.0版中肯定有最新版本。

        2
  •  3
  •   Stack Overflow is garbage    17 年前

    不,它不会以任何方式影响封装。这通常是不必要的。通常,创建一个包含较少参数的重载是一个更灵活、更简洁的解决方案,因此C#的设计人员根本没有理由将默认参数的复杂性添加到语言中。

    添加“另一种方法做同样的事情”总是一种折衷。在某些情况下,这可能很方便。但是,你越是将语法合法化,语言就变得越复杂,你就越可能陷入困境,阻碍将来的扩展。(也许有一天他们会想出另一种语言的扩展,它使用了类似的语法。那就不可能添加了,因为它会与他们之前添加的功能冲突)

        3
  •  2
  •   Pontus Gagge    17 年前

    如前所述,默认参数不是一个优先功能,但很可能会添加到C#4.0中。然而,我相信有很好的理由不把它放在前面(据我所知,在4.0中,主要是为了支持它) duck typing

    我认为过多的参数列表(当然超过4-5个不同的参数)是一个问题 code smell . 默认参数本身并不是邪恶的,但有可能助长糟糕的设计,延迟重构成更多的对象。

        4
  •  1
  •   anon anon    17 年前

    对于您的第一个问题-不,它与提供多个重载构造函数完全相同。至于第二个,我不能说。

        5
  •  1
  •   Frederik Gheysels    17 年前

    默认参数将包含在C#4.0中

    关于它的一些阅读材料:

    click

    click

    这本书的作者 this post 将在不久的将来发表一篇关于MS选择在C中实现默认参数的“原因”的文章#

        6
  •  1
  •   brzozow    17 年前

    下面是为什么C中没有提供它的答案# http://blogs.msdn.com/csharpfaq/archive/2004/03/07/85556.aspx

        7
  •  1
  •   JMD    17 年前

    另一个缺点是默认值取决于您如何投射对象。您可以在此处阅读: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/optional-parameters-conclusion-treat-like-unsafe/216.html .