C# vs. Java-Enums für C#-Anfänger
Als erfahrener Java-Entwickler erfordert der Übergang zu C# möglicherweise einige Anpassungen, einschließlich des Verständnisses der Unterschiede in Aufzählungen. Schauen wir uns die Unterschiede zwischen C#- und Java-Enums und deren Anpassung an.
In Java ermöglichen Enums benutzerdefinierte Methoden und Felder. C# hingegen bietet eine einfachere Enum-Implementierung. Als Lösung zur Überwindung dieser Einschränkung führt C# jedoch Erweiterungsmethoden ein.
Erweiterungsmethoden ermöglichen es Ihnen, Funktionalität zu vorhandenen Typen hinzuzufügen, ohne diese zu ändern. Sie können beispielsweise Erweiterungsmethoden für Ihre Planet-Enumeration erstellen, um die Java-Methoden surfaceGravity() und surfaceWeight() nachzuahmen.
Benutzerdefinierte Attribute bieten einen weiteren Ansatz zum Erweitern von Enumerationen. Sie können ein PlanetAttr-Attribut hinzufügen, um Massen- und Radiuseigenschaften für jeden Planeten zu definieren, sodass Sie in Ihren Erweiterungsmethoden auf diese Werte zugreifen können.
Hier ist eine C#-Implementierung des berühmten Planet-Enum-Beispiels unter Verwendung von Erweiterungsmethoden und benutzerdefinierten Attributen :
<code class="c#">using System; using System.Reflection; class PlanetAttr: Attribute { internal PlanetAttr(double mass, double radius) { this.Mass = mass; this.Radius = radius; } public double Mass { get; private set; } public double Radius { get; private set; } } 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)); } } 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>
Mit dieser Implementierung können Sie auf Planetenattribute zugreifen und die Schwerkraft und das Gewicht der Oberfläche wie im Java-Beispiel berechnen. Durch das Verständnis dieser Unterschiede und die Nutzung der leistungsstarken Funktionen von C# wie Erweiterungsmethoden und benutzerdefinierten Attributen wird der Übergang von Java zu C# zu einem reibungslosen und effizienten Prozess.
Das obige ist der detaillierte Inhalt vonWie vergleichen sich C#-Enumerationen mit Java-Enumerationen für einen Java-Entwickler, der auf C# umsteigt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!