Rumah  >  Artikel  >  Java  >  Bagaimanakah C# Enum boleh Dipertingkatkan dengan Kaedah Sambungan dan Atribut Tersuai untuk Meniru Fungsi Java Enum?

Bagaimanakah C# Enum boleh Dipertingkatkan dengan Kaedah Sambungan dan Atribut Tersuai untuk Meniru Fungsi Java Enum?

Linda Hamilton
Linda Hamiltonasal
2024-11-02 07:20:29776semak imbas

How can C# Enums be Enhanced with Extension Methods and Custom Attributes to Mimic Java Enum Functionality?

C# vs Java Enums: Panduan Perbandingan

Jika anda beralih dari Java ke C#, anda mungkin melihat beberapa perbezaan dalam cara enum dilaksanakan. Walaupun C# enum kelihatan lebih mudah pada mulanya, ia menawarkan kelebihan yang berbeza melalui kaedah sambungan dan atribut tersuai.

Perbezaan Utama

  • Kaedah Sambungan: Dalam C#, anda boleh melanjutkan enum dengan fungsi tambahan, termasuk kaedah dan sifat tersuai. Ini mengimbangi kekurangan kaedah terbina dalam seperti surfaceGravity() dan surfaceWeight() dalam pelaksanaan enum Java.
  • Atribut Tersuai: C# membolehkan anda melampirkan atribut tersuai pada enum, memberikan satu cara untuk menyimpan metadata tambahan. Ini boleh digunakan untuk meniru medan dan kaedah Java enum secara berkesan, seperti yang ditunjukkan dalam contoh di bawah.

Contoh dengan Kaedah Sambungan dan Atribut Tersuai

Kami boleh mentakrifkan enum untuk planet dan menambah kaedah sambungan untuk GetSurfaceGravity() dan GetSurfaceWeight():

public enum Planet
{
    [PlanetAttr(3.303e+23, 2.4397e6)]  MERCURY,
    [PlanetAttr(4.869e+24, 6.0518e6)]  VENUS,
    [PlanetAttr(5.976e+24, 6.37814e6)] EARTH,
    ...
}

public static class Planets
{
    public static double GetSurfaceGravity(this Planet p)
    {
        PlanetAttr attr = GetAttr(p);
        ...
    }
    ...
}

Kami kemudiannya boleh menggunakan kaedah sambungan ini untuk melakukan pengiraan sama seperti contoh Java:

double earthWeight = Double.parseDouble(args[0]);
double mass = earthWeight/Planet.EARTH.GetSurfaceGravity();
for (Planet p : Planet.values())
    System.out.printf("Your weight on %s is %f%n", p, p.GetSurfaceWeight(mass));

Contoh ini menunjukkan cara mencipta enum C# dengan kefungsian dipertingkat yang hampir menyerupai pelaksanaan Java.

Atas ialah kandungan terperinci Bagaimanakah C# Enum boleh Dipertingkatkan dengan Kaedah Sambungan dan Atribut Tersuai untuk Meniru Fungsi Java Enum?. 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