Heim > Java > javaLernprogramm > Hauptteil

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

Barbara Streisand
Freigeben: 2024-11-01 15:25:30
Original
813 Leute haben es durchsucht

 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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage