Heim  >  Artikel  >  Java  >  Wie vergleichen sich C#-Enumerationen mit Java-Enumerationen für einen Java-Entwickler, der auf C# umsteigt?

Wie vergleichen sich C#-Enumerationen mit Java-Enumerationen für einen Java-Entwickler, der auf C# umsteigt?

Barbara Streisand
Barbara StreisandOriginal
2024-11-02 03:38:02248Durchsuche

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

C# vs. Java-Enums für C#-Anfänger

Als erfahrener Java-Entwickler erfordert der Übergang zu C# möglicherweise einige Anpassungen, einschließlich des Verständnisses der Unterschiede in Aufzählungen. Schauen wir uns die Unterschiede zwischen C#- und Java-Enums und deren Anpassung an.

In Java ermöglichen Enums benutzerdefinierte Methoden und Felder. C# hingegen bietet eine einfachere Enum-Implementierung. Als Lösung zur Überwindung dieser Einschränkung führt C# jedoch Erweiterungsmethoden ein.

Erweiterungsmethoden ermöglichen es Ihnen, Funktionalität zu vorhandenen Typen hinzuzufügen, ohne diese zu ändern. Sie können beispielsweise Erweiterungsmethoden für Ihre Planet-Enumeration erstellen, um die Java-Methoden surfaceGravity() und surfaceWeight() nachzuahmen.

Benutzerdefinierte Attribute bieten einen weiteren Ansatz zum Erweitern von Enumerationen. Sie können ein PlanetAttr-Attribut hinzufügen, um Massen- und Radiuseigenschaften für jeden Planeten zu definieren, sodass Sie in Ihren Erweiterungsmethoden auf diese Werte zugreifen können.

Hier ist eine C#-Implementierung des berühmten Planet-Enum-Beispiels unter Verwendung von Erweiterungsmethoden und benutzerdefinierten Attributen :

<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>

Mit dieser Implementierung können Sie auf Planetenattribute zugreifen und die Schwerkraft und das Gewicht der Oberfläche wie im Java-Beispiel berechnen. Durch das Verständnis dieser Unterschiede und die Nutzung der leistungsstarken Funktionen von C# wie Erweiterungsmethoden und benutzerdefinierten Attributen wird der Übergang von Java zu C# zu einem reibungslosen und effizienten Prozess.

Das obige ist der detaillierte Inhalt vonWie vergleichen sich C#-Enumerationen mit Java-Enumerationen für einen Java-Entwickler, der auf C# umsteigt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn