7

C では、コンパイラ ディレクティブを次のように宣言できます。

#define MY_NUMBER 10

ただし、C#では、これしかできないようです:

#define MY_NUMBER

この場合、これは明らかに役に立ちません。

これは正しいですか、それとも何か間違っていますか? そうでない場合、名前空間またはソリューションレベルでこれを行う方法を誰かが提案できますか? おそらく静的クラスを作成することを考えましたが、それは1つの値に対してやり過ぎのようです。

4

6 に答える 6

6

はい、正しいです。

以下は MSDN ドキュメントからの引用です。

前処理ディレクティブは、条件付きでソース ファイルのセクションをスキップしたり、エラーや警告の状態を報告したり、ソース コードの個別の領域を描写したりする機能を提供します。「前処理ディレクティブ」という用語は、C および C++ プログラミング言語との一貫性のためにのみ使用されます。C# では、個別の前処理ステップはありません。前処理ディレクティブは、字句解析フェーズの一部として処理されます。

したがって、C や C++ のようにコンパイラ定数を実際に定義することはできません。

関連リソース:

于 2010-06-10T08:21:51.413 に答える
5

他の多くの回答では、public constフィールドの使用が提案されています。ただし、 はpublic constそれを参照するアセンブリにコンパイルされることに注意してください。 の値を変更した場合は、それが定義されているアセンブリだけでなく、それを参照するすべてのアセンブリも再コンパイルする必要がありますconst

値を変更する必要がないかどうか確信が持てない場合は、public static readonlyフィールドを使用することをお勧めします。

于 2010-06-10T09:16:08.940 に答える
3

const または static readonly を定義でき、条件付きで必要な場合は #if ディレクティブでラップできます

#if DEBUG
private const int MY_NUMBER = 10;
#else
private const int MY_NUMBER = 20;
#endif
于 2010-06-10T08:16:36.447 に答える
3

はい、あなたは正しいです。 const本当に唯一のreadonlyオプションです。

于 2010-06-10T08:13:29.900 に答える
1

public const を使用する


私の知る限り、

C# はプリプロセッサ定義を使用してコード内で置換を実行しないため、定数を使用する必要があります。

これでうまくいくはずです:

public const int MY_NUMBER = 10;
于 2010-06-10T08:15:49.477 に答える
1

次のように列挙型をチェックすることもできます

enum Numbers
{
    Nothing = 0,
    Dads = 5,
    My = 10,
    LittleJims = 25
}

したがって、C の MY_NUMBER の代わりに、Numbers.My があります。

于 2010-06-11T07:12:22.180 に答える