Java 與 C# 列舉入門指南
從 Java 轉向 C# 的開發者可能會發現,C# 的枚舉似乎比 Java 的實作更簡潔。讓我們探討 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中文網其他相關文章!