Java および C# の列挙型入門ガイド
Java から C# に移行する開発者は、C# の列挙が Java の実装よりも単純であるように見えるかもしれません。 Java と C# の列挙型の違いと、それらを克服する方法を見てみましょう。
主な違い
拡張メソッドを使用して相違点を克服します
C# では、列挙型の拡張メソッドを作成して、surfaceGravity()
や surfaceWeight()
などのメソッドを追加できます。例:
<code class="language-csharp">using System; 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 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, // ... other planets }</code>
このコードを使用すると、各 Planet
列挙値の GetSurfaceGravity()
メソッドにアクセスできます。
概要
Java 列挙型はより多くの組み込み機能を提供しますが、C# 列挙型は拡張メソッドを通じて優れた柔軟性を提供します。メソッド拡張を実装すると、Java 列挙型の機能を複製し、特定のニーズに合わせて列挙型をカスタマイズできます。
以上がJava 対 C# 列挙型: 拡張メソッドはどのようにギャップを埋めるのか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。