[解決済み] メソッド内部で変数の代わりにconstを使用する利点
疑問点
メソッド内にローカル変数がある場合、ReSharperはそれらを定数に変換するよう提案します。
// instead of this:
var s = "some string";
var flags = BindingFlags.Public | BindingFlags.Instance;
// ReSharper suggest to use this:
const string s = "some string";
const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
これらは変数ではなく定数値であるため、ReSharperはこれらをconstに変更するよう提案しているのだと理解しています。
しかし、それとは別に、constを使うことで何か他の利点(例えば、より良いパフォーマンス)があるのでしょうか?
const BindingFlags
の代わりに、便利で読みやすい
var
というキーワードを使うのでしょうか?
ちなみに、ここで似たような質問を見つけました。 文字列の代わりにconst文字列を作るようにResharperはいつも私に示唆している しかし、私はそれが私の質問はローカル変数/コンストラクタについてであるクラスのフィールドについてより多くのものだと思います。
どのように解決するのですか?
定数に値を代入しようとするとコンパイラがエラーを投げるので、誤って変更することを防げる可能性があります。
また、通常、定数対変数を使用すると、わずかながらパフォーマンスの利点があります。 これは、MSIL にコンパイルされる方法と関係があります。 この MSDN マガジンの Q&A :
<ブロッククオートこれで、コード内のどこで myInt が参照されても、変数から値を取得するために "ldloc.0" を実行する代わりに、MSIL はハードコードされている定数値をロードするだけになりました。 このように、定数を使うことには通常小さなパフォーマンスとメモリの利点があります。 しかし、それらを使用するためには、コンパイル時に変数の値を持っている必要があり、コンパイル時にこの定数を参照すると、たとえそれが別のアセンブリにあったとしても、この置換が行われます。
定数は、コンパイル時に値を知っていれば、確かに便利なツールです。そうではなく、変数が一度だけ設定されるようにしたい場合は、C#のreadonlyキーワード(MSILではinitonlyに対応)を使用して、変数の値がコンストラクタ内でのみ設定可能であることを示し、それ以降は変更するとエラーになります。これは、フィールドがクラスの識別を決定するのに役立ち、しばしばコンストラクタのパラメータに等しく設定される場合によく使用されます。
関連
-
[解決済み】C#で四捨五入する方法
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] LINQを使用してList<string>内のすべての文字列を結合する
-
[解決済み] 変数における const と constexpr の比較
-
[解決済み] JSHintでconstを使用すると警告が出るのはなぜですか?
-
[解決済み】プライベート静的メソッドを使用する利点
-
[解決済み】letやconstで宣言された変数はホイストされるのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み] 2つのリストを結合する
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。
-
[解決済み】Nullableオブジェクトは値を持たなければならない?