我支持一些具有可选参数和接口(interface)的代码。
作为一个简化的示例:我在接口(interface)中默认值为 2,在实现类中默认值为 1。
public interface IOptionalInterface
{
int Get(int x = 2);
}
public class ClassX : IOptionalInterface
{
public int Get(int x = 1)
{
return x;
}
}
正如我所料,这段代码通过了。
Assert.AreEqual(new ClassX().Get(), 1);
但是,当我将类作为接口(interface)传回并稍后调用它时,我从接口(interface)获取可选参数;这让我很惊讶。
private IOptionalInterface Build()
{
return new ClassX();
}
public void Expect1()
{
var y = Build();
Assert.AreEqual(y.Get(), 1); // fails, it returns 2.
}
我遗漏了哪些主要设计考虑因素,导致了这一点的优先?
是否有一种干净的方法来确保实现类设置默认值?
最佳答案
可选参数是在调用站点调用的纯粹编译时功能。
当您调用带有可选参数的方法时,编译器会查找该参数的默认值并将该文字值插入到调用中。
因此,默认值是根据调用站点的编译时类型解析的。
关于c# - 可选参数和接口(interface) - 意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19500895/