Alp*_*der 8 c# default compile-time-constant
编辑1:我知道有一些替代品,如伸缩式,这是一个纯粹的教育问题.
我知道这是真的,但为什么一定是这样呢?看起来像是这样的:
public class Foo{
private int bar;
public void SetBar(int baz = ThatOtherClass.GetBaz(3)){
this.bar = baz;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器可以将方法更改为:
public void SetBar(int baz){
//if baz wasn't passed:
baz = ThatOtherClass.GetBaz(3);
this.bar = baz;
}
Run Code Online (Sandbox Code Playgroud)
为什么那不起作用,或者不行,这只是一个设计决定?
因为规范如此说:
具有default-argument的fixed-parameter被称为可选参数,而没有default-argument的fixed-parameter是必需参数.在formal-parameter-list中的可选参数之后,可能不会显示必需参数.ref或out参数不能具有default-argument.default-argument中的表达式必须是以下之一:
•常量表达式
•new S()形式的表达式,其中S是值类型
•形式为default(S)的表达式,其中S是值类型
至于为什么语言设计师选择这样做,我们只能猜测.然而,该规范的另一部分提示答案:
当从具有相应可选参数的函数成员中省略参数时,将隐式传递函数成员声明的默认参数.因为它们总是不变的,所以它们的评估不会影响其余参数的评估顺序.
归档时间: |
|
查看次数: |
502 次 |
最近记录: |