Rumah  >  Artikel  >  Java  >  Bagaimanakah C# dan Java Enums Berbeza?

Bagaimanakah C# dan Java Enums Berbeza?

Linda Hamilton
Linda Hamiltonasal
2024-11-02 01:07:02406semak imbas

How Do C# and Java Enums Differ?

Memahami Perbezaan antara C# dan Java Enums

Sebagai pendatang baharu kepada C#, menavigasi melalui pangkalan kod yang banyak menggunakan enum boleh menjadi mencabar, terutamanya datang dari latar belakang Java yang kukuh . Artikel ini bertujuan untuk menjelaskan perbezaan antara enum C# dan Java, memperkasakan anda untuk merapatkan jurang dan memanfaatkan potensi penuh penghitungan C#.

Perbezaan Utama

  • Sifat Mudah daripada C# Enums: Tidak seperti Java 1.5 enums, C# enums diakui lebih mudah dalam pelaksanaannya. Ia terutamanya berfungsi sebagai mekanisme untuk mentakrifkan satu set pemalar bernama, tidak mempunyai ciri lanjutan yang terdapat dalam Java.
  • Kaedah Sambungan: Untuk mengimbangi kefungsian terhad, C# memperkenalkan kaedah sambungan, yang membolehkan anda menambah fungsi tersuai pada enum tanpa mengubah takrifan asasnya.

Melaksanakan Contoh Planet Enum Terkenal dalam C

Untuk menggambarkan aplikasi praktikal enum C# dan kaedah sambungan, mari kita menyelidiki contoh enum Planet ikonik yang digunakan dalam dokumentasi Java Sun.

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

Dalam pelaksanaan C# ini:

  • Atribut tersuai digunakan untuk melampirkan metadata kepada ahli enum dan bukannya menggunakan kelas berasingan seperti dalam contoh Java.
  • Kaedah sambungan GetSurfaceGravity dan GetSurfaceWeight menyediakan fungsi yang sama seperti kaedah Java dengan kemudahan tambahan akses terus daripada Planet enum.
  • Kaedah ForValue mengembalikan medan sepadan dengan nilai enum yang ditentukan, membolehkan pengambilan atribut melalui refleksi.

Dengan menggunakan kaedah sambungan C#, anda boleh melanjutkan fungsi enum untuk menangani kes penggunaan yang sebelum ini dikendalikan oleh pelaksanaan enum Java yang lebih mantap. Ini membolehkan peralihan yang lancar dan pengekodan yang berkesan dalam C#.

Atas ialah kandungan terperinci Bagaimanakah C# dan Java Enums Berbeza?. 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