Heim  >  Artikel  >  Java  >  Wie unterscheiden sich C#- und Java-Enums?

Wie unterscheiden sich C#- und Java-Enums?

Linda Hamilton
Linda HamiltonOriginal
2024-11-02 01:07:02407Durchsuche

How Do C# and Java Enums Differ?

Die Unterschiede zwischen C#- und Java-Enums verstehen

Als Neuling in C# kann die Navigation durch Codebasen, die Enums stark nutzen, eine Herausforderung sein, insbesondere wenn man über einen ausgeprägten Java-Hintergrund verfügt . Ziel dieses Artikels ist es, die Unterschiede zwischen C#- und Java-Aufzählungen zu entmystifizieren und Sie in die Lage zu versetzen, diese Lücke zu schließen und das volle Potenzial von C#-Aufzählungen auszuschöpfen.

Hauptunterschiede

  • Simplistische Natur von C#-Enums: Im Gegensatz zu Java 1.5-Enums sind C#-Enums zugegebenermaßen einfacher in ihrer Implementierung. Sie dienen in erster Linie als Mechanismus zum Definieren einer Reihe benannter Konstanten und verfügen nicht über die in Java vorhandenen erweiterten Funktionen.
  • Erweiterungsmethoden: Um die eingeschränkte Funktionalität auszugleichen, führt C# Erweiterungsmethoden ein, die ermöglichen es Ihnen, benutzerdefinierte Funktionen zu Aufzählungen hinzuzufügen, ohne deren zugrunde liegende Definition zu ändern.

Implementieren des Famous Planet Enum-Beispiels in C

Um die praktische Anwendung von C#-Aufzählungen und Erweiterungsmethoden zu veranschaulichen, lassen Sie uns die praktische Anwendung von C#-Aufzählungen und Erweiterungsmethoden veranschaulichen Tauchen Sie ein in das ikonische Planet-Enum-Beispiel, das in der Java-Dokumentation von Sun verwendet wird.

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

In dieser C#-Implementierung:

  • Benutzerdefinierte Attribute werden verwendet, um Metadaten an die Enum-Mitglieder anzuhängen, anstatt sie zu verwenden separate Klassen wie im Java-Beispiel.
  • Die Erweiterungsmethoden GetSurfaceGravity und GetSurfaceWeight bieten die gleiche Funktionalität wie die Java-Methoden mit dem zusätzlichen Komfort des direkten Zugriffs über die Planet-Enumeration.
  • Die ForValue-Methode gibt die zurück Feld, das dem angegebenen Enum-Wert entspricht und den Attributabruf über Reflektion ermöglicht.

Durch die Verwendung der Erweiterungsmethoden von C# können Sie die Funktionalität von Enums erweitern, um Anwendungsfälle zu adressieren, die zuvor von der robusteren Enum-Implementierung von Java behandelt wurden. Dies ermöglicht einen reibungslosen Übergang und eine effektive Codierung in C#.

Das obige ist der detaillierte Inhalt vonWie unterscheiden sich C#- und Java-Enums?. 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