C#“常量对象”用作默认参数

时间:2011-03-21 00:18:53

标签: c# const optional-parameters

有没有办法创建一个常量对象(即它无法编辑并在编译时创建)?

我正在使用C#语言并注意到可选参数功能,并认为可以将默认对象用作可选参数。请考虑以下事项:

//this class has default settings
private const SettingsClass DefaultSettings = new SettingsClass ();

public void doSomething(SettingsClass settings = DefaultSettings)
{

}

这显然不能编译,但是我想做的一个例子。 是否可以创建这样的常量对象并将其用作可选参数的默认值?

3 个答案:

答案 0 :(得分:29)

不,可选参数的默认值需要是编译时常量。

在您的情况下,解决方法是:

public void doSomething(SettingsClass settings = null)
{
    settings = settings ?? DefaultSettings;
    ...
}

答案 1 :(得分:4)

一般来说,你想要的是不可能的。如Ani的答案所示,您可以使用“无效”默认值伪造它,但如果没有值,您可以将其视为无效。对于可以将参数更改为可空类型的值类型,这不会是一个问题,但是您将引发装箱,并且还可以“稀释”函数的界面以适应实现细节。

如果将可选参数替换为多个重载的前C#4范例,则可以实现所需的功能:

public void doSomething()
{
    var settings = // get your settings here any way you like
    this.doSomething(settings);
}

public void doSomething(SettingsClass settings)
{
    // implementation
}

即使参数是值类型,也可以使用。

答案 2 :(得分:-2)

您可以使用readonly属性,而不是const。例如:

//this class has default settings 
private readonly SettingsClass DefaultSettings = new SettingsClass (); 

public void doSomething(SettingsClass settings = DefaultSettings) 
{ 
}