【发布时间】:2014-12-02 06:57:12
【问题描述】:
编辑 1:我知道有诸如伸缩之类的替代方案,这是一个纯粹的教育问题。
我知道这是真的,但为什么一定要这样呢?好像是这样的:
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() 然后在运行时返回完全不同的东西并使程序失控怎么办?
-
如果您想知道为什么 C# 语言团队没有实现某个功能,请询问他们,而不是与语言创建无关的随机开发人员。我们不知道他们为什么选择不实施此功能。
-
你总是可以选择方法重载
-
我不知道为什么,但是如果你想解决这个问题,只需在没有参数的情况下进行重载,而不是使用默认参数
void SetBar() { SetBar(ThatOtherClass.GetBaz(3)) }; void SetBar(int baz) { this.bar = baz; } -
@user1825860 您确切地知道如何完成此任务的事实表明,它绝对是可能的。这是语言团队选择不花费时间和金钱来构建的功能。如果你想知道为什么会这样,你可以试着问他们(尽管我不会屏住呼吸)。我们所能做的就是猜测他们为什么不优先考虑这样做。
标签: c# default compile-time-constant