

C#の **const**
は、変数の型の前につけますね。値を書き換えられなくなります。値が変えられなくなったらどうなりますか？どういう意味があるのでしょうか？そして、そのメリットとは何ですか。constはどんなときに必要ですか？

[code]

    namespace test
    {
        class Program
        {
            static void Main(string[] args)
            {
                const double TAX = 0.08
                int price = 1000;
                double result;
    
                result = price * TAX;
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2020-04-22T06:39:08.897
65851
2020-12-21T00:41:50.710
2020-12-21T00:41:50.710
3060
38025
question
c#
constをつける意味とメリットを教えてください。


[constキーワード](https://docs.microsoft.com/ja-jp/dotnet/csharp/language-
reference/keywords/const)で説明されています。

> いずれかの時点で変わることが予想される情報を表すために定数を作成してはなりません。
> たとえば、サービスの価格、製品バージョン番号、会社のブランド名などを格納するためには定数フィールドを使用しないでください。
> これらの値は時間の経過とともに変更される場合があります。

というわけでほとんど使わなくてもいいと思います。

* * *

マイナス投票するほどとは思いませんが、速度や効率が上がるとは思いません。.NETではJITコンパイルされます。つまり実行時に変数のアクセス状況を判断してコンパイルが可能なため、const未指定であったとしても変更されないことを検出した上で最適化が行われます。


CC BY-SA 4.0
2020-04-22T06:57:07.670
65852
2020-04-22T10:43:11.033
2020-04-22T10:43:11.033
4236
4236
65851
answer


値が変わらないことが保証されます。  
それを前提としたコードが組めるようになったり、それを前提とした最適化が施せるようになり、実行速度、実行効率が向上します


CC BY-SA 4.0
2020-04-22T06:58:38.177
65853
2020-04-22T06:58:38.177
27481
65851
answer


オイラんところのソースコードを grep したら `const` を使っているのは

  * 既にある外部機器を制御するソフトで、当該機器の仕様を表記しているところ（通信電文の電文長とかビット位置の意味とか）
  * `DllImport` で呼ぶ外部関数の仕様を表記しているところ（固定バッファサイズとか）
  * 仕様公開済みバイナリファイルでのマジックナンバー

などでした。

[c#](/questions/tagged/c%23 "'c#' のタグが付いた質問を表示") においては、プログラム自体の何かを記述するために
`const` を使う必要はまず無いでしょう。「既に仕様が決まっている何かに由来する定数」を表記するには便利に使えます。


CC BY-SA 4.0
2020-04-22T07:15:35.403
65854
2020-04-22T07:15:35.403
8589
65851
answer


大人数で開発するとき、書き換えられちゃ困る変数てのは結構ある。  
constはコンパイラのためのものというよりプログラマのためのものかな。


CC BY-SA 4.0
2020-04-22T10:52:43.550
65862
2020-04-22T10:52:43.550
18637
65851
answer