В моем проекте я нашел странную ситуацию, которая кажется полностью действительной в С#, потому что у меня нет ошибок времени компиляции.
Упрощенный пример выглядит следующим образом:
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 существует.
Для меня такая конструкция опасна. Поскольку каждый раз, когда я реализую некоторый интерфейс, я должен проверить, не мешает ли каждый метод в этом интерфейсе методам базового класса.
Если это "чистая функция С#"? Как это называется? Я что-то пропустил?