今天我们用一种close()
方法发生了一件奇怪的事情。
这是有疑问的代码:
interface ICloseable
{
void Close();
}
public class Closer
{
public void Close()
{
Console.WriteLine("closed");
}
}
public class ConcreteCloser : Closer, ICloseable
{
}
class Program
{
static void Main(string[] args)
{
var concrete = new ConcreteCloser();
concrete.Close();
Console.ReadKey();
}
}
所以问题是:
基类不实现接口。
为什么编译器接受该Closer.close()
方法作为接口方法的实现?
为什么 Visual C# 2010 Professional 和 Eclipse 中都没有警告?
对我来说,C# 和 Java 在这种情况下有点鸭式。
有人可以解释一下这背后的语言考虑吗?由于 C# 和 Java 都以相同的方式执行此操作,因此似乎有充分的理由。