10

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

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

4

7 回答 7

11

我会将此作为微软的“官方”回答。但是, C# 4.0 中肯定会提供默认(和命名)参数。

于 2009-03-08T18:38:39.423 回答
3

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

添加“做同样事情的另一种方法”始终是一种权衡。在某些情况下,它可能很方便。但是,您使语法越合法,语言学习起来就越复杂,您可能会越多地陷入困境,从而阻止未来的扩展。(也许他们有一天会为该语言提出另一个扩展,它使用类似的语法。然后那将不可能添加,因为它会与他们之前添加的功能冲突)

于 2009-03-08T18:36:52.640 回答
2

如前所述,默认参数不是优先功能,但可能会在 C# 4.0 中添加。但是,我相信有充分的理由不早点包含它(在 4.0 中,据我了解,它主要是为了支持鸭子类型的编程风格,其中默认参数增加了类型兼容性)。

我相信过多的参数列表(肯定超过 4-5 个不同的参数)是一种代码异味。默认参数本身并不邪恶,但有可能鼓励糟糕的设计,延迟重构为更多对象。

于 2009-03-08T19:37:44.087 回答
1

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

于 2009-03-08T18:36:29.677 回答
1

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

一些关于它的阅读材料:

点击

点击

看来这篇文章的作者将在不久的将来发表一篇关于“为什么”MS选择在C#中实现默认参数的文章

于 2009-03-08T18:39:27.097 回答
1

这是一个答案,为什么它没有在 C# http://blogs.msdn.com/csharpfaq/archive/2004/03/07/85556.aspx中提供

于 2009-03-08T18:41:26.437 回答
1

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

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

于 2009-03-08T18:59:18.327 回答