C# と Java の列挙型: 差異分析
Java から C# に移行する開発者にとって、2 つの言語の列挙型の違いを理解することが重要です。 C# 列挙型はよりクリーンに見えますが、最初は Java の高度な機能の一部が欠けています。
主な違い
違いを埋める
C# での Java Planet 列挙の例
次の C# コードは、拡張メソッドとカスタム属性を含む、Sun の Planet 列挙の同等の実装を示しています。
<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>
このコードは、拡張メソッドとカスタム属性を使用して追加機能で C# 列挙型を拡張し、Java 列挙型とのギャップを効果的に埋める方法を示します。
以上がC# と Java の列挙型: Java のような機能を C# 列挙型に追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。