Java Enum 機能を模倣するために拡張メソッドとカスタム属性を使用して C# Enum を拡張するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-02 07:20:29
オリジナル
835 人が閲覧しました

How can C# Enums be Enhanced with Extension Methods and Custom Attributes to Mimic Java Enum Functionality?

C# と Java の列挙型: 比較ガイド

Java から C# に移行している場合は、列挙型の使用方法にいくつかの違いがあることに気づくかもしれません。が実装されています。 C# 列挙型は最初は単純に見えますが、拡張メソッドとカスタム属性を通じて明確な利点を提供します。

主な違い

  • 拡張メソッド: C# では、カスタム メソッドやプロパティなどの追加機能を使用して列挙型を拡張できます。これにより、Java 列挙型実装にある surfaceGravity() や surfaceWeight() などの組み込みメソッドの欠如が補われます。
  • カスタム属性: C# では、列挙型にカスタム属性を付加できます。追加のメタデータを保存する方法。これは、以下の例に示すように、Java 列挙型のフィールドとメソッドを効果的にエミュレートするために利用できます。

拡張メソッドとカスタム属性を使用した例

惑星の列挙型を定義し、GetSurfaceGravity() と GetSurfaceWeight() の拡張メソッドを追加できます:

public enum Planet
{
    [PlanetAttr(3.303e+23, 2.4397e6)]  MERCURY,
    [PlanetAttr(4.869e+24, 6.0518e6)]  VENUS,
    [PlanetAttr(5.976e+24, 6.37814e6)] EARTH,
    ...
}

public static class Planets
{
    public static double GetSurfaceGravity(this Planet p)
    {
        PlanetAttr attr = GetAttr(p);
        ...
    }
    ...
}
ログイン後にコピー

これらの拡張メソッドを使用して、Java の例と同様の計算を実行できます:

double earthWeight = Double.parseDouble(args[0]);
double mass = earthWeight/Planet.EARTH.GetSurfaceGravity();
for (Planet p : Planet.values())
    System.out.printf("Your weight on %s is %f%n", p, p.GetSurfaceWeight(mass));
ログイン後にコピー

この例では、Java 実装によく似た拡張機能を備えた C# 列挙型を作成する方法を示します。

以上がJava Enum 機能を模倣するために拡張メソッドとカスタム属性を使用して C# Enum を拡張するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート