C# と Java の列挙型の違いと、機能の違いを埋める方法
Java と C# はどちらも列挙型を提供しますが、その実装方法には大きな違いがあります。 Java 列挙型はより強力ですが、C# 列挙型は比較的簡潔です。この記事では、これらの違いを検討し、C# で Java 列挙型の機能の一部をエミュレートする方法を示します。
列挙構造の違い
Java 列挙型は本質的には、インスタンスのメンバーとメソッドを備えたクラスです。 C# の列挙型は値型であり、その定数はオブジェクトではありません。 Java の enum 定数はオブジェクトですが、C# の enum 定数は単なる定数です。
機能の違い
Java 列挙型は、カスタム コードによるメソッドのオーバーロードと定数の初期化をサポートしています。 C# 列挙型にはこれらの機能がありません。
機能の違いを埋める
これらの欠点を補うために、C# には拡張メソッドが用意されています。列挙型で拡張メソッドを定義することで、不足している機能をシミュレートできます。さらに、カスタム プロパティは、列挙定数にメタデータを追加することで、メソッドのような動作を補完できます。
C# で Java の Planet 列挙をシミュレートする
C# で Java の Planet 列挙をシミュレートする方法を説明するために、surfaceGravity()
メソッドと surfaceWeight()
メソッドをシミュレートする拡張メソッドを紹介します。
<code class="language-csharp">public static class Planets { public static double GetSurfaceGravity(this Planet p) => ...; public static double GetSurfaceWeight(this Planet p, double otherMass) => ...; }</code>
<code class="language-csharp">[PlanetAttr(mass, radius)] public enum Planet { // 带有属性的枚举常量 } class PlanetAttr : Attribute { public double Mass { get; private set; } public double Radius { get; private set; } // 构造函数设置属性值 }</code>
以上がC# と Java の列挙型はどのように異なりますか? 機能のギャップを埋めるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。