Heim  >  Artikel  >  Java  >  Wie können C#-Enums mit Erweiterungsmethoden und benutzerdefinierten Attributen erweitert werden, um die Java-Enum-Funktionalität nachzuahmen?

Wie können C#-Enums mit Erweiterungsmethoden und benutzerdefinierten Attributen erweitert werden, um die Java-Enum-Funktionalität nachzuahmen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-02 07:20:29773Durchsuche

How can C# Enums be Enhanced with Extension Methods and Custom Attributes to Mimic Java Enum Functionality?

C# vs. Java-Aufzählungen: Ein Vergleichsleitfaden

Wenn Sie von Java auf C# umsteigen, werden Ihnen möglicherweise einige Unterschiede in der Art und Weise der Aufzählungen auffallen werden umgesetzt. Während C#-Aufzählungen zunächst einfacher erscheinen, bieten sie durch Erweiterungsmethoden und benutzerdefinierte Attribute deutliche Vorteile.

Hauptunterschiede

  • Erweiterungsmethoden: In C# können Sie Aufzählungen um zusätzliche Funktionen erweitern, einschließlich benutzerdefinierter Methoden und Eigenschaften. Dies gleicht das Fehlen integrierter Methoden wie surfaceGravity() und surfaceWeight() in der Java-Enum-Implementierung aus.
  • Benutzerdefinierte Attribute: Mit C# können Sie benutzerdefinierte Attribute an Enums anhängen und so Folgendes bereitstellen eine Möglichkeit, zusätzliche Metadaten zu speichern. Dies kann genutzt werden, um die Felder und Methoden von Java-Enums effektiv zu emulieren, wie im folgenden Beispiel gezeigt.

Beispiel mit Erweiterungsmethoden und benutzerdefinierten Attributen

Wir können eine Enumeration für Planeten definieren und Erweiterungsmethoden für GetSurfaceGravity() und hinzufügen GetSurfaceWeight():

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 static double GetSurfaceGravity(this Planet p)
    {
        PlanetAttr attr = GetAttr(p);
        ...
    }
    ...
}

Wir können dann diese Erweiterungsmethoden verwenden, um Berechnungen ähnlich dem Java-Beispiel durchzuführen:

double earthWeight = Double.parseDouble(args[0]);
double mass = earthWeight/Planet.EARTH.GetSurfaceGravity();
for (Planet p : Planet.values())
    System.out.printf("Your weight on %s is %f%n", p, p.GetSurfaceWeight(mass));

Dieses Beispiel zeigt, wie eine C#-Aufzählung mit erweiterter Funktionalität erstellt wird das ähnelt stark der Java-Implementierung.

Das obige ist der detaillierte Inhalt vonWie können C#-Enums mit Erweiterungsmethoden und benutzerdefinierten Attributen erweitert werden, um die Java-Enum-Funktionalität nachzuahmen?. 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