哪一个更好?乍一看,可选参数似乎更好(代码更少,XML文档更少,等等),但为什么大多数MSDN库类使用重载而不是可选参数?
当您 Select 使用可选参数(或重载)时,有什么特殊事项需要注意吗?
哪一个更好?乍一看,可选参数似乎更好(代码更少,XML文档更少,等等),但为什么大多数MSDN库类使用重载而不是可选参数?
当您 Select 使用可选参数(或重载)时,有什么特殊事项需要注意吗?
在C#4.0中,"可选参数"与"命名参数"结合使用的一个很好的用例是,它为我们提供了一种优雅的方法重载替代方案,在方法重载中,您可以根据参数的数量来重载方法.
例如,假设您希望像foo()
、foo(1)
、foo(1,2)
、foo(1,2, "hello")
这样调用/使用方法foo
.通过方法重载,您可以实现如下解决方案,
///Base foo method
public void DoFoo(int a, long b, string c)
{
//Do something
}
/// Foo with 2 params only
public void DoFoo(int a, long b)
{
/// ....
DoFoo(a, b, "Hello");
}
public void DoFoo(int a)
{
///....
DoFoo(a, 23, "Hello");
}
.....
使用C#4.0中的可选参数,您可以实现如下用例,
public void DoFoo(int a = 10, long b = 23, string c = "Hello")
然后你可以使用这样的方法——注意命名参数的使用-
DoFoo(c:"Hello There, John Doe")
此调用将参数a
的值取为10,将参数b
取为23.
此调用的另一个变体-请注意,您不需要按照参数值在方法签名中出现的顺序设置参数值,命名的参数使参数值显式显示.
DoFoo(c:"hello again", a:100)
使用命名参数的另一个好处是,它大大增强了可选参数方法的可读性,从而提高了代码维护.
请注意,一个方法在方法重载中定义3个或多个方法时会变得非常冗余.我发现这是将可选参数与命名参数结合使用的一个很好的用例.