作為C# 新手,瀏覽大量使用枚舉的程式碼庫可能具有挑戰性,尤其是來自強大的Java 背景的人。本文旨在揭開 C# 和 Java 枚舉之間的差異的神秘面紗,使您能夠彌合差距並充分利用 C# 枚舉的潛力。
為了說明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# 實作中:
透過利用 C# 的擴充方法,您可以擴充枚舉的功能,以解決先前由 Java 更強大的枚舉實作處理的用例。這可以實現 C# 中的平滑過渡和有效編碼。
以上是C# 和 Java 枚舉有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!