ホームページ  >  記事  >  Java  >  C# と Java の Enum はどう違うのでしょうか?

C# と Java の Enum はどう違うのでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-02 01:07:02406ブラウズ

How Do C# and Java Enums Differ?

C# と Java Enum の違いを理解する

C# の初心者にとって、特に Java のバックグラウンドが豊富な場合、enum を多用するコードベースをナビゲートするのは難しい場合があります。 。この記事の目的は、C# 列挙型と Java 列挙型の違いをわかりやすく説明し、ギャップを埋めて C# 列挙型の可能性を最大限に活用できるようにすることです。

主な違い

  • 単純化された性質C# 列挙型の例: Java 1.5 列挙型とは異なり、C# 列挙型は明らかに実装がより単純です。これらは主に、名前付き定数のセットを定義するメカニズムとして機能しますが、Java に存在する高度な機能はありません。
  • 拡張メソッド: 制限された機能を補うために、C# では拡張メソッドが導入されています。基になる定義を変更せずに、列挙型にカスタム機能を追加できます。

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# 実装では:

  • カスタム属性を使用して、メタデータを enum メンバーに添付するのではなく、 Java の例と同様に個別のクラスです。
  • 拡張メソッド GetSurfaceGravity および GetSurfaceWeight は、Java メソッドと同じ機能を提供し、Planet 列挙型からの直接アクセスの利便性が追加されています。
  • ForValue メソッドは、

C# の拡張メソッドを利用することで、enum の機能を拡張して、Java のより堅牢な enum 実装によって以前に処理されていたユースケースに対処できます。これにより、C# でのスムーズな移行と効果的なコーディングが可能になります。

以上がC# と Java の Enum はどう違うのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。