有没有办法创建一个常量对象(即它无法编辑并在编译时创建)?
我正在使用C#语言并注意到可选参数功能,并认为可以将默认对象用作可选参数。请考虑以下事项:
//this class has default settings
private const SettingsClass DefaultSettings = new SettingsClass ();
public void doSomething(SettingsClass settings = DefaultSettings)
{
}
这显然不能编译,但是我想做的一个例子。 是否可以创建这样的常量对象并将其用作可选参数的默认值?
答案 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)
{
}