Rumah > Java > javaTutorial > 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
Lepaskan: 2024-11-02 07:20:29
asal
888 orang telah melayarinya

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);
        ...
    }
    ...
}
Salin selepas log masuk

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));
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan