首頁 > Java > java教程 > 主體

C# 和 Java 枚舉有何不同?

Linda Hamilton
發布: 2024-11-02 01:07:02
原創
406 人瀏覽過

How Do C# and Java Enums Differ?

了解C# 和Java 枚舉之間的差異

作為C# 新手,瀏覽大量使用枚舉的程式碼庫可能具有挑戰性,尤其是來自強大的Java 背景的人。本文旨在揭開 C# 和 Java 枚舉之間的差異的神秘面紗,使您能夠彌合差距並充分利用 C# 枚舉的潛力。

主要差異

  • 簡單本質C# 枚舉的介紹: 與 Java 1.5 枚舉不同,C# 枚舉的實現無疑更加簡單。它們主要用作定義一組命名常數的機制,缺乏 Java 中的高階功能。
  • 擴充方法:為了彌補功能有限,C# 引入了擴充方法,其中允許您向枚舉添加自訂功能,而無需修改其底層定義。

用C 實現著名的Planet Enum 範例

為了說明C# 枚舉和擴展方法的實際應用,讓我們深入研究Sun 的Java 文件中使用的標誌性Planet 枚舉示例。

<code class="csharp">using System;

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
}

public static class Planets
{
    public static double GetSurfaceGravity(this Planet p)
    {
        return G * GetMass(p) / (GetRadius(p) * GetRadius(p));
    }

    public static double GetSurfaceWeight(this Planet p, double otherMass)
    {
        return otherMass * p.GetSurfaceGravity();
    }

    public const double G = 6.67300E-11;

    private static double GetMass(Planet p) => GetAttr(p).Mass;

    private static double GetRadius(Planet p) => GetAttr(p).Radius;

    private static PlanetAttr GetAttr(Planet p) =>
        (PlanetAttr)Attribute.GetCustomAttribute(ForValue(p), typeof(PlanetAttr));

    private static MemberInfo ForValue(Planet p) =>
        typeof(Planet).GetField(Enum.GetName(typeof(Planet), p));
}</code>
登入後複製

在此C# 實作中:

  • 自訂屬性用於將元資料附加到枚舉成員,而不是使用如Java 範例中所示的單獨的類。
  • 擴充方法 GetSurfaceGravity 和 GetSurfaceWeight 提供與 Java 方法相同的功能,並增加了從 Planet 枚舉直接存取的便利性。
  • ForValue 方法傳回對應於指定枚舉值的字段,透過反射啟用屬性檢索。

透過利用 C# 的擴充方法,您可以擴充枚舉的功能,以解決先前由 Java 更強大的枚舉實作處理的用例。這可以實現 C# 中的平滑過渡和有效編碼。

以上是C# 和 Java 枚舉有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!