我有以下情况:
一个构造函数接受6个值。它们中的一些有默认值,有些没有。
#pseudocode# Foo(int a, int b=2, int c=3, int d=4, int e=5, int f){}我希望能够调用所有可能的组合,而不必总是编写所有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);除了使用方法重载(这将是乏味的)来做这件事之外,还有更优雅的解决方案吗?
发布于 2011-07-12 04:12:30
在C# 4中,有一些命名参数,请参见Named and Optional Arguments (C# Programming Guide)
这将导致
new Foo(a: 1, d: 7, f: 6);另一种解决方案是使用您的默认值定义一个构造函数,并使用对象初始化器来设置值How to: Initialize Objects by Using an Object Initializer (C# Programming Guide)
new Foo()
{
a = 1,
d = 7,
f = 6
};发布于 2011-07-12 04:15:52
对命名参数使用以下内容:
Foo f1 = new Foo(a: 1, d: 7, f: 6);
Foo f2 = new Foo(a: 1, b: 9, d: 7, f: 6);有关命名参数和可选参数的更多信息,请单击此处:
http://msdn.microsoft.com/en-us/library/dd264739.aspx#Y515
发布于 2011-07-12 04:16:17
我更喜欢重构而不是Parameter Object。类似于:
Foo f1 = new Foo (new FooParameters () { B = 7 })并且您的FooParamaters类可以封装默认值:
public class FooParameters
{
public int A { get; set; }
public int B { get; set; }
public FooParameters ()
{
A = 1;
B = 2;
}
}https://stackoverflow.com/questions/6655915
复制相似问题