首頁 >Java >java教程 >對於過渡到 C# 的 Java 開發人員來說,C# 枚舉與 Java 枚舉相比如何?

對於過渡到 C# 的 Java 開發人員來說,C# 枚舉與 Java 枚舉相比如何?

Barbara Streisand
Barbara Streisand原創
2024-11-02 03:38:02343瀏覽

How do C# enums compare to Java enums for a Java developer transitioning to C#?

C# 初學者的C# 與Java 列舉

作為經驗豐富的Java 開發人員,過渡到C# 可能需要一些調整,包括了解以下方面的差異枚舉。讓我們深入研究 C# 和 Java 枚舉之間的差異以及如何適應。

在 Java 中,枚舉允許自訂方法和欄位。另一方面,C# 提供了更簡單的枚舉實作。但是,C# 引入了擴展方法作為克服此限制的解決方案。

擴充方法使您能夠為現有類型添加功能,而無需修改它們。例如,您可以為 Planet 枚舉建立擴充方法來模仿 Java 的 surfaceGravity() 和 surfaceWeight() 方法。

自訂屬性提供了另一種擴充枚舉的方法。您可以新增 PlanetAttr 屬性來定義每個行星的質量和半徑屬性,從而允許您在擴充方法中存取這些值。

這是著名的Planet 枚舉示例的C# 實現,利用擴展方法和自定義屬性:

<code class="c#">using System;
using System.Reflection;

class PlanetAttr: Attribute
{
    internal PlanetAttr(double mass, double radius)
    {
        this.Mass = mass;
        this.Radius = radius;
    }
    public double Mass { get; private set; }
    public double Radius { get; private set; }
}

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));
    }

}

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>

此實現允許您訪問行星屬性併計算表面重力和重量,如Java 範例所示。透過了解這些差異並擁抱 C# 的強大功能(如擴展方法和自訂屬性),從 Java 過渡到 C# 將成為一個平穩且高效的過程。

以上是對於過渡到 C# 的 Java 開發人員來說,C# 枚舉與 Java 枚舉相比如何?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn