EDIT 1: Я знаю, что есть альтернативы, такие как телескопирование, это был чисто образовательный вопрос.Почему параметры метода по умолчанию должны быть константами времени компиляции в C#
Я знаю, что это правда, но почему это должно быть? Похоже, что-то вроде этого:
public class Foo{
private int bar;
public void SetBar(int baz = ThatOtherClass.GetBaz(3)){
this.bar = baz;
}
}
Компилятор может изменить способ что-то вроде этого:
public void SetBar(int baz){
//if baz wasn't passed:
baz = ThatOtherClass.GetBaz(3);
this.bar = baz;
}
Почему бы эту работу, или это, и это просто дизайнерское решение ?
потому что разница между значениями времени выполнения и значениями времени компиляции может быть разной. что, если кодер хотел бы получить значение времени компиляции «hardcoded» там, но GetBaz() затем возвращает что-то совершенно другое во время выполнения и выбрасывает программу из строя? –
Если вы хотите знать, почему команда языка C# не реализовала функцию, задайте ее, а не случайные разработчики, которые не имеют никакого отношения к созданию языка. Мы не можем знать, почему они решили не выполнять эту функцию. – Servy
у вас всегда есть возможность перегрузки метода –