如何避免方法重载?

Fab*_*ian 5 c# optional-parameters

我有以下情况:

构造函数需要6个值.其中一些有默认值,有些则没有.

#pseudocode# Foo(int a, int b=2, int c=3, int d=4, int e=5, int f){}
Run Code Online (Sandbox Code Playgroud)

我希望能够调用所有可能的组合,而不必总是写出所有6个参数.

#pseudocode# Foo f1 = new Foo(a=1, d=7, f=6);
#pseudocode# Foo f2 = new Foo(a=1, b=9, d=7, f=6);
Run Code Online (Sandbox Code Playgroud)

除了使用方法重载(这将是乏味的)这样做,是否有更优雅的解决方案?

moi*_*eme 12

在C#4中,有命名参数参见Named和Optional Arguments(C#编程指南)

这将导致

new Foo(a: 1, d: 7, f: 6);
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是使用您的defaut值定义构造函数,并使用Object Initializer设置值如何:使用对象初始化程序初始化对象(C#编程指南)

new Foo()
{
    a = 1,
    d = 7,
    f = 6
};
Run Code Online (Sandbox Code Playgroud)

  • 更准确地说,C#4.语言,而不是框架.(在编辑之前发表评论,但我将其留在此处以供上下文使用) (4认同)
  • 对于那些不知道@BoltClock正在尝试制作它的人来说,这意味着如果你在VS2010中进行编译,你可以使用C#4编译器,但仍然可以编译为.NET 3.5,这样你就可以使用可选参数而不需要客户端只要编译机器就有.NET 4. (2认同)