2016-12-29 14 views
0

私はC#プログラムを持っていますが、プログラム全体からアクセスできるようにする定数がいくつかあります。私はいつでもそれらを変更する必要はありません。プログラム全体の定数変数を持たせるには

私は静的なクラスを試して、うまくいきました。私は '静的クラス'を宣言し、変数を 'public static'の内部に入れました。

case文でこれらの変わらない変数を使いたいときに問題が発生しました。これはconstを受け付けるだけなので、あまりうまく動かなかった。

質問があります:私は静的な変数を持っていない静的なクラスを持っている場合、これも同様に動作しますか?これはpublic staticからpublic constになります。

ありがとうございました。

+0

試しましたか? – Stijn

+0

はい、うまく動作します。 –

+0

'static'と' const'はお互いを除外しません。 'public const'を使うだけで、自動的に静的になります。もちろん、これはプロパティの種類によって異なります。 'const'は、整数や浮動小数点の値や文字列などの時定数をコンパイルすることしかできませんが、構築する必要のあるオブジェクトはコンパイルできません。 –

答えて

4

はい、デフォルトではconststaticです。

1

によって異なります。 Constは変数ではなく、リテラルでなければなりません。あなたが作成したクラスのようなconstに変数を代入しようとしているなら、それを静的な読み取り専用として保持する必要があります。数値や文字列などのリテラルを割り当てることを意味するのであれば、constは問題ありません。

いくつかの例:

public const int Number = 1; // this works; 1 is a literal 
public const int Number = SomeClass.SomeProperty; // this does not work 
public const int Number = SomeClass.SomeConst; // this works 

public const SomeClass Var = new SomeClass(); // does not work 
public const string Var = "test"; // this works as "test" is a literal. 

あなたがやってのyoureのより良いリテラルを使用していない場合:数値リテラルを使用している場合

public static readonly SomeClass Var = new SomeClass(); 

別のオプションは、基本的に静的なクラスです列挙型があるが一部の機能が追加されました。

public enum MyConstants 
{ 
    VarOne, // defaults to 0 
    VarTwo, // defaults to next number (1) 
    VarThree // defaults to next number (2) 
} 
関連する問題