Maison  >  Article  >  Java  >  Comment les énumérations C# se comparent-elles aux énumérations Java pour un développeur Java passant à C# ?

Comment les énumérations C# se comparent-elles aux énumérations Java pour un développeur Java passant à C# ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-02 03:38:02248parcourir

How do C# enums compare to Java enums for a Java developer transitioning to C#?

Énumérations C# vs Java pour les débutants en C#

En tant que développeur Java chevronné, la transition vers C# peut nécessiter quelques ajustements, notamment la compréhension des différences dans énumérations. Examinons les disparités entre les énumérations C# et Java et comment nous adapter.

En Java, les énumérations permettent des méthodes et des champs personnalisés. C#, en revanche, offre une implémentation d'énumération plus simple. Cependant, C# introduit des méthodes d'extension comme solution pour surmonter cette limitation.

Les méthodes d'extension vous permettent d'ajouter des fonctionnalités aux types existants sans les modifier. Par exemple, vous pouvez créer des méthodes d'extension pour votre énumération Planet afin d'imiter les méthodes surfaceGravity() et surfaceWeight() de Java.

Les attributs personnalisés fournissent une autre approche pour étendre les énumérations. Vous pouvez ajouter un attribut PlanetAttr pour définir les propriétés de masse et de rayon de chaque planète, vous permettant ainsi d'accéder à ces valeurs dans vos méthodes d'extension.

Voici une implémentation C# du célèbre exemple d'énumération Planet, utilisant des méthodes d'extension et des attributs personnalisés. :

<code class="c#">using System;
using System.Reflection;

class PlanetAttr: Attribute
{
    internal PlanetAttr(double mass, double radius)
    {
        this.Mass = mass;
        this.Radius = radius;
    }
    public double Mass { get; private set; }
    public double Radius { get; private set; }
}

public static class Planets
{
    public static double GetSurfaceGravity(this Planet p)
    {
        PlanetAttr attr = GetAttr(p);
        return G * attr.Mass / (attr.Radius * attr.Radius);
    }

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

    public const double G = 6.67300E-11;

    private static PlanetAttr GetAttr(Planet p)
    {
        return (PlanetAttr)Attribute.GetCustomAttribute(ForValue(p), typeof(PlanetAttr));
    }

    private static MemberInfo ForValue(Planet p)
    {
        return typeof(Planet).GetField(Enum.GetName(typeof(Planet), p));
    }

}

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
}</code>

Cette implémentation vous permet d'accéder aux attributs de la planète et de calculer la gravité et le poids de la surface comme dans l'exemple Java. En comprenant ces différences et en adoptant les puissantes fonctionnalités de C# telles que les méthodes d'extension et les attributs personnalisés, la transition de Java vers C# devient un processus fluide et efficace.

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