ホームページ >バックエンド開発 >C++ >Java 対 C# 列挙型: 拡張メソッドはどのようにギャップを埋めるのか?

Java 対 C# 列挙型: 拡張メソッドはどのようにギャップを埋めるのか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-12 07:34:46885ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。