C# C中参数的默认值#
我使用C# C中参数的默认值#,c#,.net-4.0,C#,.net 4.0,我使用.netframework4.0 这个类有两个构造函数,都有一个默认值为120秒的interval参数。有没有办法在私有变量中设置interval的默认值,然后将该变量指定给interval参数。我尝试过这样做,但是我得到了一个编译时错误,说“interval”的默认参数值必须是编译时常量 public class Schedule { public Delegate Callback { get; set; } public object[] Params { get;
.netframework4.0
这个类有两个构造函数,都有一个默认值为120秒的
interval
参数。有没有办法在私有变量中设置interval的默认值,然后将该变量指定给interval参数。我尝试过这样做,但是我得到了一个编译时错误,说“interval”的默认参数值必须是编译时常量
public class Schedule
{
public Delegate Callback { get; set; }
public object[] Params { get; set; }
public int Interval { get; set; }
public Schedule(Delegate callback, int interval = 120)
{
}
public Schedule(Delegate callback, object[] parameters, int interval = 120)
{
}
}
不,因为可选参数的工作方式是调用代码的编译器将默认值烘焙到其中。这样的电话:
new Schedule(MyCallback)
在编译时转换为:
这就是为什么它必须是一个常数。现在,你仍然可以把它设为常数——如果你愿意,甚至可以设为私有变量——但它不能是一个普通变量。所以这没关系:
public class Schedule
{
private const int DefaultInterval = 120;
public Schedule(Delegate callback, int interval = DefaultInterval)
{
}
public Schedule(Delegate callback, object[] parameters,
int interval = DefaultInterval)
{
...
}
}
如果您想要一个在执行时可能会变化的值,可以使用一个可为null的类型作为参数,其中null值是默认值,在执行时由实际默认值替换。例如,这里有一个方法允许您指定时间戳,但默认为“now”:
无法将动态值作为默认参数。它应该在编译时就知道了。事实上,可以用作默认参数的值集与用作属性参数的值集相同,因为默认参数值作为属性发出 您可以使用一个常量:
private const int DefaultInterval = 120;
public Schedule(Delegate callback, int interval =DefaultInterval)
{
}
public Schedule(Delegate callback, object[] parameters, int interval = DefaultInterval)
{
}
哦,很好,我尝试使用一个私有变量,但那是
变量
而不是常量
。谢谢,这很有帮助。
public void Foo(DateTime? timestamp = null)
{
DateTime realTimestamp = timestamp ?? DateTime.UtcNow;
...
}
private const int DefaultInterval = 120;
public Schedule(Delegate callback, int interval =DefaultInterval)
{
}
public Schedule(Delegate callback, object[] parameters, int interval = DefaultInterval)
{
}