Dans mon projet, j'ai trouvé une situation étrange qui semble tout à fait valable en C#, car je n'ai aucune erreur de compilation.
Un exemple simplifié ressemble à cela :
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();
}
}
}
Un tel code se compile. Cependant, notez que A
n'est pas IFoo
y B
ne met pas en œuvre IFoo
méthodes. Dans mon cas, par accident (après le refactoring), A
possède la méthode avec la même signature. Mais pourquoi A
savoir comment mettre en œuvre le FooMethod
de la IFoo
l'interface ? A
ne sait même pas que IFoo
existent.
Pour moi, avoir un tel design est dangereux. En effet, chaque fois que j'implémente une interface, je dois vérifier si chaque méthode de cette interface "interfère" avec les méthodes de la classe de base.
Si c'est une "fonctionnalité purement C#" ? Comment s'appelle-t-elle ? Est-ce que quelque chose m'échappe ?