首頁 >後端開發 >C++ >Java 與 C# 枚舉:擴展方法如何彌合差距?

Java 與 C# 枚舉:擴展方法如何彌合差距?

Patricia Arquette
Patricia Arquette原創
2025-01-12 07:34:46886瀏覽

Java vs. C# Enums: How Do Extension Methods Bridge the Gap?

Java 與 C# 列舉入門指南

從 Java 轉向 C# 的開發者可能會發現,C# 的枚舉似乎比 Java 的實作更簡潔。讓我們探討 Java 和 C# 枚舉之間的差異,以及如何克服這些差異。

主要差異

  • 方法支援:Java 枚舉支援定義方法,而 C# 枚舉傳統上不支援。

使用擴充方法克服差異

在 C# 中,您可以為枚舉建立擴充方法,以新增諸如 surfaceGravity()surfaceWeight() 之類的方法。例如:

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

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 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,
    // ... other planets
}</code>

透過這段程式碼,您可以存取每個 Planet 枚舉值的 GetSurfaceGravity() 方法。

總結

雖然 Java 枚舉提供了更多內建功能,但 C# 枚舉透過擴充方法提供了更大的靈活性。透過實作方法擴展,您可以複製 Java 枚舉的功能,並根據您的特定需求自訂枚舉。

以上是Java 與 C# 枚舉:擴展方法如何彌合差距?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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