编辑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;
}
为什么不这项工作,或者将它,它只是一个设计决策?
因为在运行时值和编译时值之间可能存在差异。如果编码器需要编译时间值“硬编码”,那么GetBaz()会在运行时返回完全不同的内容并引发程序出错? – 2014-10-07 18:42:44
如果您想知道为什么C#语言团队没有实现某个功能,请向他们询问,而不是与语言创建无关的随机开发人员。我们无法知道他们为什么选择不实施此功能。 – Servy 2014-10-07 18:42:55
你总是有方法重载的选项 – 2014-10-07 18:43:52