C# vs. Java-Enums: Welches bietet mehr Funktionalität?
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Top 4 JavaScript -Frameworks in 2025: React, Angular, Vue, Svelte

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache?

Node.js 20: wichtige Leistungssteigerung und neue Funktionen

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle?

ICEBERG: Die Zukunft von Data Lake Tabellen

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Problem behoben

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden?

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung?
