我支持一些具有可选参数和接口的代码。
作为一个简化的示例:我在接口中默认为 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);
但是,当我将类作为接口传回并稍后调用它时,我会从接口中获取可选参数;这让我很惊讶。
private IOptionalInterface Build()
{
return new ClassX();
}
public void Expect1()
{
var y = Build();
Assert.AreEqual(y.Get(), 1); // fails, it returns 2.
}
我缺少哪些主要的设计考虑因素使这种优先考虑?
有没有一种干净的方法来确保实现类设置默认值?