首頁  >  文章  >  Java  >  如何使用擴充方法和自訂屬性來增強 C# 枚舉以模仿 Java 枚舉功能?

如何使用擴充方法和自訂屬性來增強 C# 枚舉以模仿 Java 枚舉功能?

Linda Hamilton
Linda Hamilton原創
2024-11-02 07:20:29773瀏覽

How can C# Enums be Enhanced with Extension Methods and Custom Attributes to Mimic Java Enum Functionality?

C# 與Java 列舉:比較指南

如果您從Java 過渡到C#,您可能會注意到枚舉方式上的一些差異已實施。雖然 C# 枚舉最初看起來更簡單,但它們透過擴展方法和自訂屬性提供了明顯的優勢。

主要區別

  • 擴充方法:在C# 中,您可以使用附加功能擴充枚舉,包括自訂方法和屬性。這彌補了 Java 枚舉實作中缺少 SurfaceGravity() 和 surfaceWeight() 等內建方法的不足。
  • 自訂屬性: C# 允許您將自訂屬性附加到枚舉,提供一種儲存附加元資料的方法。這可以用來有效地模擬 Java 枚舉的欄位和方法,如下例所示。

具有擴展方法和自訂屬性的範例

我們可以為行星定義一個枚舉,並為GetSurfaceGravity() 和GetSurWeight() 添加擴展方法:

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

然後我們可以使用這些擴充方法來執行類似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));

此範例示範如何建立具有與Java 實作非常相似的增強功能的C# 枚舉。

以上是如何使用擴充方法和自訂屬性來增強 C# 枚舉以模仿 Java 枚舉功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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