Méthodes statiques virtuelles et abstraites en C#
Lorsque vous travaillez avec des fournisseurs, la question de savoir si les classes abstraites peuvent avoir des méthodes statiques abstraites se pose. Comprendre ce concept nécessite une explication claire.
Pourquoi les méthodes statiques ne sont pas instanciées
Les méthodes statiques ne sont pas instanciées directement ; ils sont accessibles sans nécessiter de référence d'objet. Ils sont invoqués via le nom de la classe, et non via une instance d'objet.
Implications des appels statiques non virtuels
Dans le code Intermediate Language (IL), des appels de méthodes statiques sont effectués en utilisant le nom de classe qui a défini la méthode, et non le nom de classe de l'objet référent. Par exemple :
public class A { public static void Test() { } } public class B : A { } class Program { static void Main(string[] args) { B.Test(); } }
Le code IL de la méthode Main est :
.entrypoint .maxstack 8 L0000: nop L0001: call void ConsoleApplication1.A::Test() L0006: nop L0007: ret
Remarquez que l'appel est effectué vers A.Test, et non vers B.Test, même si B. Le test est invoqué dans le code C#.
Limites de virtualité avec Static Méthodes
Les méthodes virtuelles, y compris les méthodes abstraites, sont utiles lorsqu'il s'agit de variables pouvant faire référence à différents types d'objets au moment de l'exécution. Pour les méthodes statiques, la méthode cible est connue au moment de la compilation car elle est accessible via le nom de la classe. Cela élimine le besoin de virtualisation.
Par conséquent, les méthodes statiques virtuelles/abstraites ne sont pas prises en charge en C#. En effet, les appels de méthodes statiques ne sont pas virtuels et la méthode cible est déterminée au moment de la compilation, ce qui rend la virtualisation inutile.
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!