EDYCJA 1: Wiem, że istnieją alternatywy, takie jak teleskopowanie, to było pytanie wyłącznie edukacyjne.Dlaczego domyślne parametry metody muszą być stałymi w czasie kompilacji C#
Wiem, że to prawda, ale dlaczego tak się dzieje? Wydaje się, ze coś takiego:
public class Foo{
private int bar;
public void SetBar(int baz = ThatOtherClass.GetBaz(3)){
this.bar = baz;
}
}
Kompilator może zmienić sposób, aby coś takiego:
public void SetBar(int baz){
//if baz wasn't passed:
baz = ThatOtherClass.GetBaz(3);
this.bar = baz;
}
dlaczego nie tej pracy, czy byłoby to, i to tylko decyzja projektowa ?
ponieważ może wystąpić różnica między wartościami wykonawczymi a wartościami czasu kompilacji. co jeśli koder chciałby, aby wartość kompilacji była "zakodowana", ale GetBaz() zwraca coś zupełnie innego w czasie wykonywania i wyrzuca program z walnięcia? –
Jeśli chcesz wiedzieć, dlaczego zespół językowy C# nie zaimplementował funkcji, zapytaj ich, zamiast losowych programistów, którzy nie mieli nic wspólnego z tworzeniem języka. Nie wiemy, dlaczego zdecydowali się nie wdrażać tej funkcji. – Servy
zawsze masz możliwość przeciążenia metody –