首页 > 后端开发 > C++ > Java 与 C# 枚举:扩展方法如何弥合差距?

Java 与 C# 枚举:扩展方法如何弥合差距?

Patricia Arquette
发布: 2025-01-12 07:34:46
原创
884 人浏览过

Java vs. C# Enums: How Do Extension Methods Bridge the Gap?

Java 与 C# 枚举入门指南

从 Java 转向 C# 的开发者可能会发现,C# 的枚举似乎比 Java 的实现更简洁。让我们探讨 Java 和 C# 枚举之间的差异,以及如何克服这些差异。

主要差异

  • 方法支持: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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板