EDIT 1: Tôi biết có các lựa chọn thay thế như telescoping, đây là một câu hỏi thuần túy về giáo dục.Tại sao các tham số phương thức mặc định phải là hằng số biên dịch trong C#
Tôi biết điều này là đúng, nhưng tại sao phải vậy? Nó có vẻ như với một cái gì đó như thế này:
public class Foo{
private int bar;
public void SetBar(int baz = ThatOtherClass.GetBaz(3)){
this.bar = baz;
}
}
Trình biên dịch có thể thay đổi phương thức để một cái gì đó như thế này:
public void SetBar(int baz){
//if baz wasn't passed:
baz = ThatOtherClass.GetBaz(3);
this.bar = baz;
}
Tại sao không làm việc đó, hoặc sẽ nó, và nó chỉ là một quyết định thiết kế ?
vì có thể có sự khác biệt giữa giá trị thời gian chạy và giá trị thời gian biên dịch. những gì nếu coder muốn một giá trị biên dịch thời gian "hardcoded" trong đó, nhưng GetBaz() sau đó trả về một cái gì đó hoàn toàn khác nhau tại thời gian chạy và ném chương trình ra khỏi Whack? –
Nếu bạn muốn biết lý do tại sao nhóm ngôn ngữ C# không triển khai tính năng, hãy hỏi họ, thay vì các nhà phát triển ngẫu nhiên không liên quan gì đến việc tạo ngôn ngữ. Chúng tôi không thể biết tại sao họ chọn không triển khai tính năng này. – Servy
bạn luôn có tùy chọn nạp chồng phương pháp –