0

对于具有可选参数的方法,更好的方法是什么:

  1. 声明常量并将其用作默认参数:

在此处输入图像描述

  1. 或者在方法中声明默认参数:

在此处输入图像描述

对于图像而不是代码,我很抱歉,但所见即所得的编辑器有问题。

4

3 回答 3

2

正如其他人已经指出的那样,这对产生的 IL 没有任何影响。

我想就使用默认参数提出一个切线点:

因为它们被编译到软件中,所以在发布软件后更改它们可能会导致错误。您可以使用不同的默认设置来使用不同的软件组件。

使用特殊的“默认值”指标会更好(如果可以的话)。然后在方法内部,您检测这些特殊值并替换适当的默认值。这样,您可以更可靠地更改未来版本中的默认值。

例如,对于您的 CreateApple() 示例,您可以执行以下操作:

static Apple CreateApple(string size = "<<default>>", string colour = "<<default>>")
{
    if (size == "<<default>>")
        size = "Big";

    if (colour == "<<default>>")
        colour = "Red";

我认为在这种情况下你应该使用枚举——但同样适用于枚举和其他类型。只要您的值不属于该参数的有效正常范围,您就可以使用它来表示“默认”。

于 2013-05-16T17:10:25.263 回答
1

这真的是个人喜好问题。两者将基本相同。

const然而,在许多情况下可能具有优势。如果您在代码中的多个位置使用该值,我更喜欢const声明而不是指定内联,因为您不会重复该值,并且它使检查变得更简单(并且可能在以后更改),因为它被保留在一个地方。

于 2013-05-16T17:00:07.260 回答
-1

可以在类中放置默认值。
它有在课堂上强制执行的好处。
对任何阅读课程的人来说都是显而易见的。

public class Apple
{
    private string size  = "big";
    private string color = "red";
    public string  Size  { get { return size; }  set { size  = value; } } 
    public string  Color { get { return color; } set { color = value; } }
    public Apple() 
    { } // for private as default 
    public Apple(string Size, string Color) 
    { size = Size; color = Color; }   // if you don't want the private defaults
}

如果您想要一个的默认值而不是另一个的默认值

Apple apple = new Apple("small", (new Apple()).Color);
于 2013-05-16T17:27:24.823 回答