Maison > développement back-end > C++ > Les classes abstraites peuvent-elles avoir des méthodes statiques en C# ?

Les classes abstraites peuvent-elles avoir des méthodes statiques en C# ?

Patricia Arquette
Libérer: 2025-01-03 14:11:40
original
582 Les gens l'ont consulté

Can Abstract Classes Have Static Methods in C#?

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();
    }
}
Copier après la connexion

Le code IL de la méthode Main est :

.entrypoint
.maxstack 8
L0000: nop 
L0001: call void ConsoleApplication1.A::Test()
L0006: nop 
L0007: ret 
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal