Maison >Java >javaDidacticiel >En quoi les énumérations C# et Java diffèrent-elles ?

En quoi les énumérations C# et Java diffèrent-elles ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-02 01:07:02495parcourir

How Do C# and Java Enums Differ?

Comprendre les différences entre les énumérations C# et Java

En tant que nouveau venu en C#, naviguer dans des bases de code qui utilisent fortement les énumérations peut être difficile, en particulier si vous avez une solide expérience en Java. . Cet article vise à démystifier les différences entre les énumérations C# et Java, vous permettant ainsi de combler le fossé et d'exploiter tout le potentiel des énumérations C#.

Différences clés

  • Nature simpliste des énumérations C# : Contrairement aux énumérations Java 1.5, les énumérations C# sont certes plus simples dans leur implémentation. Elles servent principalement de mécanisme pour définir un ensemble de constantes nommées, dépourvues des fonctionnalités avancées présentes dans Java.
  • Méthodes d'extension : Pour compenser les fonctionnalités limitées, C# introduit des méthodes d'extension, qui vous permettent d'ajouter des fonctionnalités personnalisées aux énumérations sans modifier leur définition sous-jacente.

Implémentation de l'exemple Famous Planet Enum en C

Pour illustrer l'application pratique des énumérations et des méthodes d'extension C#, voyons plongez dans l'exemple emblématique de l'énumération Planet utilisé dans la documentation Java de Sun.

<code class="csharp">using System;

public enum Planet
{
    [PlanetAttr(3.303e+23, 2.4397e6)] MERCURY,
    [PlanetAttr(4.869e+24, 6.0518e6)] VENUS,
    [PlanetAttr(5.976e+24, 6.37814e6)] EARTH,
    [PlanetAttr(6.421e+23, 3.3972e6)] MARS,
    [PlanetAttr(1.9e+27, 7.1492e7)] JUPITER,
    [PlanetAttr(5.688e+26, 6.0268e7)] SATURN,
    [PlanetAttr(8.686e+25, 2.5559e7)] URANUS,
    [PlanetAttr(1.024e+26, 2.4746e7)] NEPTUNE,
    [PlanetAttr(1.27e+22, 1.137e6)] PLUTO
}

public static class Planets
{
    public static double GetSurfaceGravity(this Planet p)
    {
        return G * GetMass(p) / (GetRadius(p) * GetRadius(p));
    }

    public static double GetSurfaceWeight(this Planet p, double otherMass)
    {
        return otherMass * p.GetSurfaceGravity();
    }

    public const double G = 6.67300E-11;

    private static double GetMass(Planet p) => GetAttr(p).Mass;

    private static double GetRadius(Planet p) => GetAttr(p).Radius;

    private static PlanetAttr GetAttr(Planet p) =>
        (PlanetAttr)Attribute.GetCustomAttribute(ForValue(p), typeof(PlanetAttr));

    private static MemberInfo ForValue(Planet p) =>
        typeof(Planet).GetField(Enum.GetName(typeof(Planet), p));
}</code>

Dans cette implémentation C# :

  • Les attributs personnalisés sont utilisés pour attacher des métadonnées aux membres de l'énumération au lieu d'utiliser classes séparées comme dans l'exemple Java.
  • Les méthodes d'extension GetSurfaceGravity et GetSurfaceWeight fournissent les mêmes fonctionnalités que les méthodes Java avec la commodité supplémentaire d'un accès direct depuis l'énumération Planet.
  • La méthode ForValue renvoie le champ correspondant à la valeur d'énumération spécifiée, permettant la récupération d'attributs par réflexion.

En utilisant les méthodes d'extension de C#, vous pouvez étendre la fonctionnalité des énumérations pour répondre aux cas d'utilisation précédemment traités par l'implémentation d'énumération plus robuste de Java. Cela permet une transition en douceur et un codage efficace en C#.

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