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中文网其他相关文章!