OOP中的默认参数是不好的做法吗?

时间:2009-03-08 18:33:50

标签: c# oop default

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

在C#中不提供默认参数背后的理由是什么?

7 个答案:

答案 0 :(得分:11)

我会将this作为微软的“官方”回答。但是,默认(和命名)参数 绝对可以在C#4.0中使用。

答案 1 :(得分:3)

不,它不会以任何方式影响封装。它通常不是必需的。通常,创建一个占用较少参数的重载是一种更灵活,更清晰的解决方案,因此C#的设计者根本没有理由将默认参数的复杂性添加到该语言中。

添加“另一种做同样事情的方法”总是需要权衡。在某些情况下,它可能很方便。但是,你合法的语法越多,语言的学习就越复杂,你自己就越容易陷入困境,阻碍了未来的扩展。 (也许他们有一天会想出另一种语言扩展,它使用类似的语法。然后就不可能添加,因为它与之前添加的功能相冲突)

答案 2 :(得分:2)

如前所述,默认参数不是优先级功能,但可能会在C#4.0中添加。但是,我认为有很好的理由不提前包含它(在4.0中,正如我所理解的那样,它主要是支持duck typing编程样式,其中默认参数增加了类型兼容性)。

我认为过多的参数列表(当然超过4-5个不同的参数)是code smell。默认参数本身并不邪恶,但风险鼓励设计不良,将重构延迟到更多对象。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

默认参数将包含在C#4.0

关于它的一些阅读材料:

click

click

this post的作者似乎也会在不久的将来发表一篇关于'为什么'MS选择在C#中实现默认参数的文章

答案 5 :(得分:1)

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

答案 6 :(得分:1)

C#4.0中默认参数实现的一个缺点是它会创建对参数名称的依赖。这已经存在于VB中,这可能是他们选择在4.0中实现它的一个原因。

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