Comprendre pourquoi les méthodes statiques n'implémentent pas d'interfaces en C#
C# interdit aux méthodes statiques d’implémenter des interfaces. Cette restriction est ancrée dans le concept de base des interfaces : définir des contrats comportementaux pour les classes.
Les interfaces spécifient les opérations qu'une classe doit effectuer. Toutefois, les méthodes statiques fonctionnent au niveau du type et non sur des instances de classe spécifiques. Par conséquent, autoriser la mise en œuvre d’une interface de méthode statique contredirait les principes de programmation orientée objet.
Exemple illustratif :
<code class="language-csharp">public interface IListItem { string ScreenName(); } public class Animal : IListItem { // Incorrect: Static method violates the interface contract public static string ScreenName() { return "Animal"; } // ... other members ... }</code>
La méthode ScreenName
, idéalement, devrait renvoyer le nom d'affichage d'une instance spécifique IListItem
. Une implémentation statique pour Animal
est imparfaite car elle renvoie « Animal » pour chaque animal, en ignorant les caractéristiques individuelles.
La solution recommandée :
<code class="language-csharp">public class Animal : IListItem { public const string AnimalScreenName = "Animal"; public string ScreenName() { return AnimalScreenName; } }</code>
Cette approche révisée utilise une propriété constante pour contenir le nom statique. La méthode ScreenName
accède ensuite à cette constante, en conservant un comportement basé sur l'instance comme l'exige l'interface. Cela garantit que le contrat d'interface est correctement rempli.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!