C# の初心者にとって、特に Java のバックグラウンドが豊富な場合、enum を多用するコードベースをナビゲートするのは難しい場合があります。 。この記事の目的は、C# 列挙型と Java 列挙型の違いをわかりやすく説明し、ギャップを埋めて C# 列挙型の可能性を最大限に活用できるようにすることです。
C# 列挙型と拡張メソッドの実際のアプリケーションを説明するために、次の手順を実行します。 Sun の Java ドキュメントで使用されている象徴的な Planet enum の例を詳しく調べます。
<code class="csharp">using System; 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 } public static class Planets { public static double GetSurfaceGravity(this Planet p) { return G * GetMass(p) / (GetRadius(p) * GetRadius(p)); } public static double GetSurfaceWeight(this Planet p, double otherMass) { return otherMass * p.GetSurfaceGravity(); } public const double G = 6.67300E-11; private static double GetMass(Planet p) => GetAttr(p).Mass; private static double GetRadius(Planet p) => GetAttr(p).Radius; private static PlanetAttr GetAttr(Planet p) => (PlanetAttr)Attribute.GetCustomAttribute(ForValue(p), typeof(PlanetAttr)); private static MemberInfo ForValue(Planet p) => typeof(Planet).GetField(Enum.GetName(typeof(Planet), p)); }</code>
この C# 実装では:
C# の拡張メソッドを利用することで、enum の機能を拡張して、Java のより堅牢な enum 実装によって以前に処理されていたユースケースに対処できます。これにより、C# でのスムーズな移行と効果的なコーディングが可能になります。
以上がC# と Java の Enum はどう違うのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。