Нет, потому что способ, которым работают необязательные параметры, заключается в том, что компилятор , вызывающий код , имеет значение по умолчанию.Поэтому вызов, подобный этому:
new Schedule(MyCallback)
преобразуется во время компиляции в:
new Schedule(MyCallback, 120)
Так вот почему он должен быть константойТеперь вы все равно можете сделать это константой - даже частной, если хотите - но она не может быть нормальной переменной.Так что это будет хорошо:
public class Schedule
{
private const int DefaultInterval = 120;
public Schedule(Delegate callback, int interval = DefaultInterval)
{
}
public Schedule(Delegate callback, object[] parameters,
int interval = DefaultInterval)
{
...
}
}
Если вы хотите, чтобы значение, которое может изменяться во время выполнения, вы могли бы использовать в качестве параметра обнуляемый тип с нулевым значением по умолчанию, заменяемым real по умолчанию во время выполнения.Например, вот метод, который позволяет вам указать метку времени, но по умолчанию «сейчас»:
public void Foo(DateTime? timestamp = null)
{
DateTime realTimestamp = timestamp ?? DateTime.UtcNow;
...
}