1

我有一个采用一堆可选参数的方法,并且我正在重载该方法以提供不同的签名组合。Intellisense 会弹出一堆不同的签名,但我认为现在看起来很混乱,因为我需要提供不同的组合,而不仅仅是在方法签名的末尾建立参数。

我是否应该不重载我的方法并坚持一个签名,以便我的方法的用户必须传入空值?它会使签名更清晰,但会使调用代码看起来更混乱。

4

3 回答 3

8

您是否仅限于使用 C# 1-3?C# 4 支持可选参数和命名参数...

在那之前,您可能应该坚持重载创建一个具有可变属性的单独类,例如

FooOptions options = new FooOptions { Name="Jon", Location="Reading" };
Foo foo = new Foo(options);

如果您愿意,这一切都可以在一个语句中完成......并且如果某些属性是强制性的,则创建一个FooOptions包含所有属性的构造函数。

在 C# 4 中,您可以编写:

Foo foo = new Foo(name: "Jon", location: "Reading");

如果构造函数写成

public Foo(string name,
           int age = 0,
           string location = null,
           string profession = null)

命名参数和可选参数应该使在 C# 4 中构造具有可选属性的不可变类型变得更加容易:)

于 2009-07-30T14:47:24.630 回答
0

想想 c# 方法的 params 参数。

void test(params object []arg) {
   ..
}
于 2009-07-30T14:47:30.230 回答
0

如果函数定义的长度仅不同(而不是顺序,否则这不是最佳方法),则可以使用params 关键字。然后在函数中,您可以根据参数输入设置所需的值

于 2009-07-30T14:49:51.600 回答