Rumah > pembangunan bahagian belakang > C++ > C# vs. Java Enums: Apakah Perbezaan Utama dan Bagaimana Saya Boleh Berhijrah Secara Berkesan dari Java ke C#?

C# vs. Java Enums: Apakah Perbezaan Utama dan Bagaimana Saya Boleh Berhijrah Secara Berkesan dari Java ke C#?

DDD
Lepaskan: 2025-01-12 10:11:46
asal
674 orang telah melayarinya

C# vs. Java Enums: What are the Key Differences and How Can I Effectively Migrate from Java to C#?

C# lwn. Java Enums: Menjelaskan Perbezaan untuk Pendatang Baru C#

Apabila berhijrah dari Java ke C#, anda mungkin melihat perbezaan dalam pelaksanaan penghitungan. Walaupun C# enum mungkin kelihatan lebih mudah pada pandangan pertama, memahami perbezaannya adalah penting untuk menggunakan keupayaan mereka dengan berkesan.

Perbezaan antara C# dan penghitungan Java

  • Keselamatan jenis: Penghitungan Java menyediakan keselamatan jenis yang lebih ketat dengan mencipta subkelas secara automatik dan menguatkuasakan eksklusiviti. C# enum, sebaliknya, ialah jenis nilai dan membenarkan penukaran tersirat, yang boleh membawa kepada ralat masa jalan.
  • Penghadan fungsi: Penghitungan Java menyediakan kaedah terbina dalam seperti valueOf, name dan ordinal. Penghitungan C# tidak mempunyai kaedah ini tetapi membenarkan kaedah sambungan tersuai untuk meningkatkan fungsinya.
  • Storan: Java enumeration menyimpan nilai enumerasi sebagai objek pada timbunan. Penghitungan C# menyimpan nilai sebagai integer pada timbunan, menyediakan akses yang lebih pantas dan jejak memori yang lebih kecil.
  • Sifat: Penghitungan Java boleh mempunyai data yang dikaitkan disimpan dalam EnumConstants, tetapi ia adalah statik dan tidak boleh diubah. Penghitungan C# menyokong sifat tersuai, membolehkan anda menambah maklumat tambahan secara dinamik.

Mengatasi Perbezaan

Untuk merapatkan jurang antara Java dan C# enum, pertimbangkan perkara berikut:

  • Menggunakan kaedah sambungan: Penghitungan C# membolehkan anda menentukan kaedah sambungan yang mereplikasi kefungsian kaedah penghitungan Java. Ini menyediakan cara yang mudah untuk mengakses operasi biasa tanpa mengubah takrifan penghitungan teras.
  • Memanfaatkan Sifat Tersuai: C# membolehkan anda menentukan sifat tersuai yang boleh digunakan untuk mengaitkan data tambahan dengan nilai penghitungan. Pendekatan ini menyediakan cara yang fleksibel untuk menyimpan dan mengakses sifat lanjutan pada penghitungan.

Pelaksanaan setara contoh planet dalam C#

Untuk meniru kefungsian penghitungan Planet di Java, anda boleh melaksanakan sifat tersuai dan kaedah sambungan dalam C# seperti berikut:

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

namespace Planets
{
    [AttributeUsage(AttributeTargets.Field)]
    public class PlanetAttribute : Attribute
    {
        public double Mass { get; set; }
        public double Radius { get; set; }
    }

    public enum Planet
    {
        [PlanetAttribute(3.303e+23, 2.4397e6)]
        Mercury,
        [PlanetAttribute(4.869e+24, 6.0518e6)]
        Venus,
        [PlanetAttribute(5.976e+24, 6.37814e6)]
        Earth,
        [PlanetAttribute(6.421e+23, 3.3972e6)]
        Mars,
        [PlanetAttribute(1.9e+27, 7.1492e7)]
        Jupiter,
        [PlanetAttribute(5.688e+26, 6.0268e7)]
        Saturn,
        [PlanetAttribute(8.686e+25, 2.5559e7)]
        Uranus,
        [PlanetAttribute(1.024e+26, 2.4746e7)]
        Neptune,
        [PlanetAttribute(1.27e+22, 1.137e6)]
        Pluto
    }

    public static class PlanetExtensions
    {
        public static double SurfaceGravity(this Planet planet)
        {
            PlanetAttribute attribute = GetAttribute<PlanetAttribute>(planet);
            return GetG() * attribute.Mass / (attribute.Radius * attribute.Radius);
        }

        public static double SurfaceWeight(this Planet planet, double mass)
        {
            return mass * planet.SurfaceGravity();
        }

        private static double GetG() => 6.67300E-11;

        private static T GetAttribute<T>(Planet planet) where T : Attribute
        {
            FieldInfo fieldInfo = typeof(Planet).GetField(planet.ToString());
            return fieldInfo.GetCustomAttribute<T>();
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            double earthWeight = 175;
            double mass = earthWeight / Planet.Earth.SurfaceGravity();
            Console.WriteLine($"Weight on each planet (mass = {mass}):");
            foreach (Planet planet in Enum.GetValues<Planet>())
            {
                Console.WriteLine($"{planet}: {planet.SurfaceWeight(mass)}");
            }
        }
    }
}</code>
Salin selepas log masuk

Contoh yang dikemas kini ini menunjukkan cara menggunakan sifat tersuai untuk menyimpan data planet dan cara menggunakan kaedah sambungan untuk melaksanakan fungsi SurfaceGravity() dan SurfaceWeight(), menyediakan setara C# bagi penghitungan Planet Java.

Atas ialah kandungan terperinci C# vs. Java Enums: Apakah Perbezaan Utama dan Bagaimana Saya Boleh Berhijrah Secara Berkesan dari Java ke C#?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan