更新:这个问题是我2011年5月12日博客的主题。感谢您提出的伟大问题!
假设您有一个描述的接口,以及一百个实现该接口的类。然后,您决定将接口方法之一的参数设为可选。您是否在建议正确的事情是让编译器强迫开发人员查找该接口方法的每个实现,并使参数也可选?
假设我们做到了。现在,假设开发人员没有实现的源代码:
// in Metadata:
public class B
{
public void TestMethod(bool b) {}
}
// in source code
interface MyInterface
{
void TestMethod(bool b = false);
}
class D : B, MyInterface {}
// Legal because D's base class has a public method
// that implements the interface method
D的作者应该如何进行这项工作?在您的世界中,他们是否需要打电话给B的作者,并要求他们为他们提供新版本的B,使该方法具有可选参数?
那不会飞。如果有 两个 人打电话给B的作者,而其中一个人希望默认为true,而其中一个人希望为false,该怎么办?如果B的作者只是拒绝一起玩怎么办?
也许在这种情况下,他们将被要求说:
class D : B, MyInterface
{
public new void TestMethod(bool b = false)
{
base.TestMethod(b);
}
}
拟议的功能似乎给程序员增加了很多不便,而代表能力没有相应增加。此功能的显着优势是什么,可以证明用户增加了成本?
更新:在下面的评论中,supercat提出了一种语言功能,它将真正增加语言的功能并启用某些类似于此问题中描述的场景的方案。仅供参考,该功能- 接口中方法的默认实现-将添加到C#8中。