0

C#/XAMLを使用してWindows8用のVisualStudio Express2012でWindows8アプリを開発しようとしていますが、その間にいくつかの問題が発生します。

私はJavaのバックグラウンドを持っており、C#の知識はほとんどありません。Java列挙型をC#に変換しようとしています。

私は自分の正確な要件に合うJonSkeetの記事に出くわしました。しかし、この質問のコメントと回答から、私はそれが提案されたアイデアであることに気づきました。私の悪い!:)

ただし、上記の記事の後で私が見つけた最も近い翻訳はこれです: https ://stackoverflow.com/a/4778347/1127443

ただし、上記の実装を使用しても、VSはAttributeでgetCustomAttribute()メソッドを見つけることができません。

共通フィールドと抽象関数を定義できるC#でJava列挙型のアイデアを実装するにはどうすればよいですか?基本的に、列挙型の概念を、特定の実装を持つ特定のクラスの許可されたインスタンスのセットとして戻したいと思います。

4

3 に答える 3

1

この記事では、既存のC#機能については説明していませんが、将来実装するのがよいと思われる機能についての提案があります。うまくいかないだろう。

于 2012-12-01T14:22:38.780 に答える
1

これが私があなたのコードにできるだけ近づくために何をするかです:

列挙型は使用しないでください。ただし、いくつかの定数フィールドを使用して静的クラスを作成してください。

    public static class ArithmeticOperation
    {
        public static const Func<int, int, int> Addition = (x, y) => x+y;
        public static const Func<int, int, int> Subtraction = (x, y) => x - y;
        public static const Func<int, int, int> Multiplication = (x, y) => x * y;
        public static const Func<int, int, int> Division = (x, y) => x / y;
    }

他の方法と同じように使用できます。

    static void Main(string[] args)
    {
        var result = ArithmeticOperation.Addition(1, 2);
    }

または、列挙型のようにパラメータで使用します。

    private int DoCalculation(Func<int, int, int> operation)
    {
           return operation(1, 2);
    }

    ...

     DoCalculation(ArithmeticOperations.Addition);

Func<int, int, int>ArithmeticOperationのプロパティだけでなく、任意のものをパラメータとして渡すことができます。

于 2012-12-01T14:33:39.527 に答える
0

ソースコードをコピーするだけでなく、記事を読む必要があります

あなたが投稿した記事から:

この投稿は、C#4.0の機能提案です。(この種のものの蓋は3.0で閉じられていると思います。)

説明されている機能は、JavaのようにC#で列挙型を拡張する試みでした。しかし、今のところ、そのようなことはC#4.0でも起こりません。

編集:

列挙型を使用すると、どのような種類のメリットが得られると思いますか?Javaでは、このような実装は非常にまれです。

列挙型の概念を理解する必要があります。一般に、列挙型はコンパイル時定数を人間が読み取れるようにするために使用されます。番号0、1、2、3を使用する代わりに、それらの番号ZERO、ONE、TWO、THREEのコードエイリアスで使用します。通常、列挙型は、日、月などの名前などの最終的な構造を格納するために使用されます。

そして、これがC#がJavaのような列挙型をサポートしない理由だと思います。

于 2012-12-01T14:44:05.567 に答える