在我的项目中,我发现了一个在 C# 中似乎完全有效的奇怪情况,因为我没有编译时错误。
简化示例如下所示:
using System;
using System.Collections.Generic;
namespace Test
{
interface IFoo
{
void FooMethod();
}
class A
{
public void FooMethod()
{
Console.WriteLine("implementation");
}
}
class B : A, IFoo
{
}
class Program
{
static void Main(string[] args)
{
IFoo foo = new B();
foo.FooMethod();
}
}
}
这样的代码编译。但是,请注意,A
它不是IFoo
也B
不会实现IFoo
方法。在我的情况下,偶然(重构后),A
具有相同签名的方法。但是为什么要A
知道如何实现FooMethod
接口IFoo
呢?A
甚至不知道IFoo
存在。
对我来说有这样的设计是危险的。因为每次我实现某个接口时,我都应该检查这个接口中的每个方法是否“干扰”了基类方法。
如果这是“纯 C# 功能”?这叫什么?我错过了什么吗?