C# 2.0入門続き
- 第6回 部分クラスと静的クラス
最初の節はdelegateによる変数のキャプチャの話。delegateによるキャプチャが生成されると、delegateが生きている限り変数(オブジェクト)も生き続けるので、Garbage Collectionされないという注意。いわれてみればもっともな話ですが、見逃しやすい点です。Javaでもそうでしたが、オブジェクトのメモリがどのようなタイミングで回収されるかをイメージするのはそれなりに重要かと思います。ただ長時間動作し続けるアプリケーションでなければ気にすることも無いでしょう。
部分クラスは便利ですね。クラスのコードが巨大化して保守し難くなることがありますし、すべてのコードが密に結合しているわけでもありません。場合によっては、部分クラスによってファイル分割するのも便利でしょう。
静的クラスも、なぜ他の言語に無いのか不思議になる機能ですね。Singleton Patternなんぞと銘打つぐらいなら最初からこういうクラスを用意しておけばいいのに。まあ、ある種の後知恵なのかもしれません。アクセッサの拡張(アクセシビリティ制御)は、最近VSを使い始めた私からすると、おや、当初は無かったんだ、といった機能です。こうやってみると、初期のC#(VBもでしょうね)では、いまや普通に使うような機能が結構漏れていたのですね。 - 第7回 名前空間のエイリアス修飾子と外部アセンブリ
List3でエラーになる理由が最初わかりませんでした。名前空間はグローバルな名前空間から識別名毎にネストした構成になっていて、ある識別名への参照は、ローカルな名前空間から始まって、(個別の識別名が)最初に一致したところから、再度下位の空間を探索していくという仕様になっているのですね。で、List3の場合、A.B.C.SayHelloは、最初はSample.Main空間で探索して見つからないので、次に、その上位のSample名前空間で探索されます。すると、Sample空間に名前A(Sample.A)があるので、そこで、B.C.SayHelloを探すことになります。すると、B.Cまでは見つかりますが、そこにはSayHelloは無いのでエラーになるわけですね。じっくり考えるとごもっとも、ですが、これは間違え易そうです。ここではglobal::で参照先を明確化していますが、汎用的な解決方法としては次に節で説明されているextern aliasで指定するべきなのでしょう。
InternalsVisibleToも使い勝手のよさそうな属性です。コード上、特定のクラスでしか使わないクラスは結構ありますので、無駄にパブリックにしない方法が提供されているのは有り難いですね。 - 最終回 小さな改善とコンパイラの新機能、そして3.0への展望
まあ、ここは読み飛ばしですね。確かにさっさとC#3.0の勉強に入らないと。
ただ、ざっと見た感想をいうと、ひとこと「なにか胡散臭い」、でした。せっかくオブジェクト指向言語使っていて、こういうテストしていのかな?オブジェクト指向言語の場合はオブジェクトレベルでの動作確認が簡単にできるのに、異なったレベルのテストで、わざわざ面倒にしているとしか思えません。
0 件のコメント:
コメントを投稿