Maison >Java >javaDidacticiel >Comment les énumérations C# peuvent-elles être améliorées avec des méthodes d'extension et des attributs personnalisés pour imiter la fonctionnalité d'énumération Java ?

Comment les énumérations C# peuvent-elles être améliorées avec des méthodes d'extension et des attributs personnalisés pour imiter la fonctionnalité d'énumération Java ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-02 07:20:29887parcourir

How can C# Enums be Enhanced with Extension Methods and Custom Attributes to Mimic Java Enum Functionality?

Énumérations C# vs Java : un guide comparatif

Si vous passez de Java à C#, vous remarquerez peut-être des différences dans la façon dont les énumérations sont mises en œuvre. Bien que les énumérations C# semblent plus simples au départ, elles offrent des avantages distincts grâce aux méthodes d'extension et aux attributs personnalisés.

Différences clés

  • Méthodes d'extension : En C#, vous pouvez étendre les énumérations avec des fonctionnalités supplémentaires, notamment des méthodes et des propriétés personnalisées. Cela compense le manque de méthodes intégrées telles que surfaceGravity() et surfaceWeight() dans l'implémentation des énumérations Java.
  • Attributs personnalisés : C# vous permet d'attacher des attributs personnalisés aux énumérations, en fournissant un moyen de stocker des métadonnées supplémentaires. Cela peut être utilisé pour émuler efficacement les champs et les méthodes des énumérations Java, comme démontré dans l'exemple ci-dessous.

Exemple avec des méthodes d'extension et des attributs personnalisés

Nous pouvons définir une énumération pour les planètes et ajouter des méthodes d'extension pour GetSurfaceGravity() et GetSurfaceWeight() :

public enum Planet
{
    [PlanetAttr(3.303e+23, 2.4397e6)]  MERCURY,
    [PlanetAttr(4.869e+24, 6.0518e6)]  VENUS,
    [PlanetAttr(5.976e+24, 6.37814e6)] EARTH,
    ...
}

public static class Planets
{
    public static double GetSurfaceGravity(this Planet p)
    {
        PlanetAttr attr = GetAttr(p);
        ...
    }
    ...
}

Nous pouvons ensuite utiliser ces méthodes d'extension pour effectuer des calculs de la même manière que l'exemple Java :

double earthWeight = Double.parseDouble(args[0]);
double mass = earthWeight/Planet.EARTH.GetSurfaceGravity();
for (Planet p : Planet.values())
    System.out.printf("Your weight on %s is %f%n", p, p.GetSurfaceWeight(mass));

Cet exemple montre comment créer une énumération C# avec des fonctionnalités améliorées qui ressemblent beaucoup à l'implémentation Java.

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!

Déclaration:
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