可选参数:常量与方法中的直接声明?

时间:2013-05-16 16:57:22

标签: c# .net methods constants optional-parameters

使用可选参数的方法有哪些更好的方法:

  1. 声明常量并将其用作默认参数:
  2. enter image description here

    1. 或在方法中声明默认参数:
    2. enter image description here

      我很抱歉图片而不是代码,但WYSIWYG编辑器是错误的。

3 个答案:

答案 0 :(得分:2)

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

我想就使用默认参数提出切入点:

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

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

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

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

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

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

答案 1 :(得分:1)

这实际上是个人偏好的问题。两者基本相同。

然而,

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

答案 2 :(得分:-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);