Rumah >pembangunan bahagian belakang >C++ >C# vs. Java Enums: Bagaimana Saya Menambah Fungsi pada C# Enums Seperti di Java?

C# vs. Java Enums: Bagaimana Saya Menambah Fungsi pada C# Enums Seperti di Java?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-12 07:37:43690semak imbas

C# vs. Java Enums: How Do I Add Functionality to C# Enums Like in Java?

C# dan Penghitungan Java: Analisis Perbezaan

Untuk pembangun yang berpindah dari Java ke C#, adalah penting untuk memahami perbezaan antara penghitungan dalam dua bahasa. Walaupun C# enum kelihatan lebih bersih, mereka pada mulanya kekurangan beberapa ciri lanjutan Java.

Perbezaan Utama

  • Parameter pembina: Penghitungan Java boleh mempunyai parameter pembina, membenarkan pengamulaan dengan data tambahan. C# enums tidak mempunyai pembina.
  • Kaedah dan Sifat: Penghitungan Java boleh mengandungi kaedah dan sifat. C# enumeration tidak boleh mentakrifkan kaedah atau sifat secara langsung ia mesti ditakrifkan sebagai kaedah sambungan.
  • Setara anotasi: Di Java, anda boleh menggunakan anotasi untuk mengaitkan metadata dengan penghitungan. Dalam C#, atribut tersuai mempunyai fungsi yang serupa.

Merapatkan perbezaan

  • Kaedah sambungan: Kaedah sambungan C# menyediakan kefungsian kaedah dan sifat penghitungan Java.
  • Atribut Tersuai: Atribut tersuai C# boleh digunakan untuk menyimpan data tambahan di sebelah nilai penghitungan.

Contoh penghitungan Java Planet dalam C#

Kod C# berikut menunjukkan pelaksanaan yang setara dengan penghitungan Planet Matahari, termasuk kaedah sambungan dan atribut tersuai:

<code class="language-csharp">using System;
using System.Reflection;

namespace PlanetEnum
{
    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));
        }
    }

    [AttributeUsage(AttributeTargets.Field)]
    public class PlanetAttr : Attribute
    {
        public PlanetAttr(double mass, double radius)
        {
            Mass = mass;
            Radius = radius;
        }

        public double Mass { get; private set; }
        public double Radius { get; private set; }
    }

    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>

Kod ini menunjukkan cara menggunakan kaedah sambungan dan atribut tersuai untuk melanjutkan enum C# dengan fungsi tambahan, dengan berkesan merapatkan jurang dengan enum Java.

Atas ialah kandungan terperinci C# vs. Java Enums: Bagaimana Saya Menambah Fungsi pada C# Enums Seperti di Java?. 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