ホームページ  >  記事  >  Java  >  C# に移行する Java 開発者にとって、C# 列挙型は Java 列挙型とどのように比較されるのでしょうか?

C# に移行する Java 開発者にとって、C# 列挙型は Java 列挙型とどのように比較されるのでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-02 03:38:02248ブラウズ

How do C# enums compare to Java enums for a Java developer transitioning to C#?

C# 初心者向けの C# と Java Enums

経験豊富な Java 開発者として、C# に移行するには、次の違いを理解するなど、いくつかの調整が必要になる場合があります。列挙型。 C# と Java の列挙型の相違点とその適応方法を詳しく見てみましょう。

Java では、列挙型によりカスタム メソッドとフィールドが可能になります。一方、C# は、より単純な enum 実装を提供します。ただし、C# では、この制限を克服するソリューションとして拡張メソッドが導入されています。

拡張メソッドを使用すると、既存の型を変更せずに機能を追加できます。たとえば、Planet 列挙型の拡張メソッドを作成して、Java の surfaceGravity() および surfaceWeight() メソッドを模倣できます。

カスタム属性は、列挙型を拡張するための別のアプローチを提供します。 PlanetAttr 属性を追加して、各惑星の質量と半径のプロパティを定義すると、拡張メソッドでこれらの値にアクセスできるようになります。

これは、拡張メソッドとカスタム属性を利用した、有名な Planet 列挙型の例の C# 実装です。 :

<code class="c#">using System;
using System.Reflection;

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 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));
    }

}

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>

この実装により、Java の例と同様に、惑星の属性にアクセスし、表面の重力と重量を計算できます。これらの違いを理解し、拡張メソッドやカスタム属性などの C# の強力な機能を活用することで、Java から C# への移行がスムーズかつ効率的なプロセスになります。

以上がC# に移行する Java 開発者にとって、C# 列挙型は Java 列挙型とどのように比較されるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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