kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

プログラミング.NET Framework 7章,8章

プログラミング.NET FRAMEWORK 第3版 (マイクロソフト公式解説書)

プログラミング.NET FRAMEWORK 第3版 (マイクロソフト公式解説書)

電車の中で読んでました。定数とフィールドの扱い。はっきり意識していませんでした(C流にまずconst考えてしまっていました)が、constとreadonlyの違いはちゃんと意識しないといけないですね。
具体的には厳密名がついていないアセンブリの場合、constはコンパイル時に畳み込まれてしまうため、constを定義していないdllがなくても動いてしまいます*1
したがって、こんな状況でよろしくない。

  • ソリューションAにあるクラスA1でpublic const int hoge = 5とか定義されている
  • ソリューションBにあるクラスB1でクラスA1のhogeを参照する。
  • ソリューションA側のhogeの定数を変えても、普通にVSで生成しているだけでは、クラスB1側ではクラスA1の変更がわからない(なくても動いてしまう)ので、誤った動作をしてしまう…と。

一つのソリューションだけでやっていた場合、Visual Studioソースコードの変更をちゃんと検知して、関連ビルドしてくれる(はず)ので、問題ないでしょうけど、気を付けたいですね。こういうときはreadonlyを使いましょうということが書かれています。
C#でのコンストラクターでの挙動はC++と異なるので、気を付けたいところですね。ええ、構造体のコンストラクター書くときによくC#コンパイラに怒られてます…。

*1:現実にはアセンブリにconstのフィールドだけってことはないでしょうけど