Heim >Java >javaLernprogramm >C# vs. Java-Enums: Welches bietet mehr Funktionalität?

C# vs. Java-Enums: Welches bietet mehr Funktionalität?

Barbara Streisand
Barbara StreisandOriginal
2024-11-01 15:25:30818Durchsuche

 C# vs Java Enums: Which One Offers More Functionality?

C# vs. Java-Enums: Ein Vergleich

Java-Enums bieten eine leistungsstarke Möglichkeit, Konstanten mit zusätzlicher Funktionalität wie Konstruktoren, Methoden und Instanzvariablen zu definieren. Obwohl C#-Aufzählungen auf den ersten Blick einfacher erscheinen mögen, weisen sie im Vergleich zur robusten Java-Implementierung Nachteile auf.

Hauptunterschiede

Feature Java C#
Constructors Supported Not supported
Methods Supported Requires extension methods
Instance variables Supported Requires custom attributes or dictionaries
Values Immutable Mutable

Überwindung der Unterschiede

Erweiterungsmethoden : Um eine ähnliche Funktionalität wie Java-Enums hinzuzufügen, ermöglicht C# die Definition von Erweiterungsmethoden für Enums. Der folgende Code stellt beispielsweise Methoden zur Berechnung der Oberflächengravitation und des Oberflächengewichts bereit:

<code class="csharp">public static class Planets
{
    public static double GetSurfaceGravity(this Planet p) { /* ... */ }
    public static double GetSurfaceWeight(this Planet p, double otherMass) { /* ... */ }
}</code>

Benutzerdefinierte Attribute: Benutzerdefinierte Attribute können verwendet werden, um zusätzliche Informationen zu Aufzählungen zu speichern. Hier ist eine Beispielimplementierung:

<code class="csharp">[PlanetAttr(3.303e+23, 2.4397e6)]
public enum Planet
{
    MERCURY,
    VENUS,
    EARTH,
    // ...
}

public class PlanetAttr : Attribute
{
    public double Mass { get; private set; }
    public double Radius { get; private set; }

    public PlanetAttr(double mass, double radius)
    {
        Mass = mass;
        Radius = radius;
    }
}</code>

Durch Zugriff auf das benutzerdefinierte Attribut für einen Enum-Wert können Sie die zugehörigen Eigenschaften abrufen.

Planet Enum-Beispiel

Hier ist ein C#-Äquivalent zur Sun's Planet-Enumeration unter Verwendung von Erweiterungsmethoden und benutzerdefinierten Attributen:

<code class="csharp">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 const double G = 6.67300E-11;

    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();
    }

    private static PlanetAttr GetAttr(Planet p)
    {
        FieldInfo field = typeof(Planet).GetField(Enum.GetName(typeof(Planet), p));
        return field.GetCustomAttribute<PlanetAttr>();
    }
}</code>

Dieser Code definiert die Planet-Enumeration mit benutzerdefinierten Attributen für Masse und Radius. Die Planets-Klasse bietet Erweiterungsmethoden zur Berechnung der Oberflächenschwerkraft und des Oberflächengewichts, die über die Aufzählungen selbst zugänglich sind.

Das obige ist der detaillierte Inhalt vonC# vs. Java-Enums: Welches bietet mehr Funktionalität?. 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