Heim > Backend-Entwicklung > C++ > C# vs. Java-Enums: Wie füge ich C#-Enums wie in Java Funktionalität hinzu?

C# vs. Java-Enums: Wie füge ich C#-Enums wie in Java Funktionalität hinzu?

Mary-Kate Olsen
Freigeben: 2025-01-12 07:37:43
Original
686 Leute haben es durchsucht

C# vs. Java Enums: How Do I Add Functionality to C# Enums Like in Java?

C#- und Java-Enumerationen: Differenzanalyse

Für Entwickler, die von Java auf C# umsteigen, ist es wichtig, die Unterschiede zwischen Aufzählungen in den beiden Sprachen zu verstehen. Während C#-Aufzählungen sauberer aussehen, fehlen ihnen zunächst einige der erweiterten Funktionen von Java.

Hauptunterschiede

  • Konstruktorparameter: Java-Enumerationen können Konstruktorparameter haben, die eine Initialisierung mit zusätzlichen Daten ermöglichen. C#-Aufzählungen haben keine Konstruktoren.
  • Methoden und Eigenschaften: Java-Enumerationen können Methoden und Eigenschaften enthalten. C#-Enumerationen können keine Methoden oder Eigenschaften direkt definieren; sie müssen als Erweiterungsmethoden definiert werden.
  • Annotationsäquivalent: In Java können Sie Annotationen verwenden, um Metadaten mit einer Aufzählung zu verknüpfen. In C# haben benutzerdefinierte Attribute eine ähnliche Funktionalität.

Überbrückung der Unterschiede

  • Erweiterungsmethoden: C#-Erweiterungsmethoden stellen die Funktionalität von Java-Enumerationsmethoden und -Eigenschaften bereit.
  • Benutzerdefinierte Attribute: Benutzerdefinierte C#-Attribute können verwendet werden, um zusätzliche Daten neben dem Aufzählungswert zu speichern.

Beispiel für eine Java Planet-Aufzählung in C#

Der folgende C#-Code demonstriert eine äquivalente Implementierung der Sun's Planet-Enumeration, einschließlich Erweiterungsmethoden und benutzerdefinierten Attributen:

<code class="language-csharp">using System;
using System.Reflection;

namespace PlanetEnum
{
    public static class Planets
    {
        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();
        }

        public const double G = 6.67300E-11;

        private static PlanetAttr GetAttr(Planet p)
        {
            return (PlanetAttr)Attribute.GetCustomAttribute(ForValue(p), typeof(PlanetAttr));
        }

        private static MemberInfo ForValue(Planet p)
        {
            return typeof(Planet).GetField(Enum.GetName(typeof(Planet), p));
        }
    }

    [AttributeUsage(AttributeTargets.Field)]
    public class PlanetAttr : Attribute
    {
        public PlanetAttr(double mass, double radius)
        {
            Mass = mass;
            Radius = radius;
        }

        public double Mass { get; private set; }
        public double Radius { get; private set; }
    }

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

Dieser Code zeigt, wie Erweiterungsmethoden und benutzerdefinierte Attribute verwendet werden, um C#-Aufzählungen um zusätzliche Funktionen zu erweitern und so die Lücke zu Java-Aufzählungen effektiv zu schließen.

Das obige ist der detaillierte Inhalt vonC# vs. Java-Enums: Wie füge ich C#-Enums wie in Java Funktionalität hinzu?. 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