Rumah  >  Artikel  >  Java  >  Bagaimanakah C# enum dibandingkan dengan Java enum untuk pembangun Java yang beralih ke C#?

Bagaimanakah C# enum dibandingkan dengan Java enum untuk pembangun Java yang beralih ke C#?

Barbara Streisand
Barbara Streisandasal
2024-11-02 03:38:02248semak imbas

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

C# vs Java Enums untuk C# Beginners

Sebagai pembangun Java yang berpengalaman, peralihan kepada C# mungkin memerlukan beberapa pelarasan, termasuk memahami perbezaan dalam enums. Mari kita mendalami perbezaan antara enum C# dan Java serta cara menyesuaikan diri.

Di Java, enum membenarkan kaedah dan medan tersuai. C#, sebaliknya, menawarkan pelaksanaan enum yang lebih mudah. Walau bagaimanapun, C# memperkenalkan kaedah sambungan sebagai penyelesaian untuk mengatasi had ini.

Kaedah sambungan membolehkan anda menambah kefungsian pada jenis sedia ada tanpa mengubah suainya. Sebagai contoh, anda boleh mencipta kaedah sambungan untuk enum Planet anda untuk meniru kaedah surfaceGravity() dan surfaceWeight() Java.

Atribut tersuai menyediakan pendekatan lain untuk melanjutkan enum. Anda boleh menambah atribut PlanetAttr untuk menentukan sifat jisim dan jejari bagi setiap planet, membolehkan anda mengakses nilai tersebut dalam kaedah sambungan anda.

Berikut ialah pelaksanaan C# bagi contoh enum Planet yang terkenal, menggunakan kaedah sambungan dan atribut tersuai :

<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>

Pelaksanaan ini membolehkan anda mengakses atribut planet dan mengira graviti permukaan dan berat seperti dalam contoh Java. Dengan memahami perbezaan ini dan menerima ciri berkuasa C# seperti kaedah sambungan dan atribut tersuai, peralihan daripada Java kepada C# menjadi proses yang lancar dan cekap.

Atas ialah kandungan terperinci Bagaimanakah C# enum dibandingkan dengan Java enum untuk pembangun Java yang beralih ke C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn