C# は最強か?

仕事も一段落したので、最近は C# で遊んでみたりしています。幸い Delphi2005 を購入したので、クールでビジュアルな開発環境を使ってショボいプログラムを作ることが出来るという幸せな環境になったからでもありますが。

C# と言えば MS が鳴り物入りで出してきた .NET 用のオブジェクト指向言語であることは有名です。実際には .NET でなくても使える訳ですが今の所は .NET 専用と考えていても問題ないでしょう。C++Java の良い所を吸収し、MS なりの拡張を施した現在の最強言語と言われています。確かにいろいろ便利な部分はあり、これから開発するなら C# かなぁ、なんてことも思わなくもないですが、いかんせん .NET 専用なのが痛いトコロ。今時の PC で .NET Framework が入っていない Windows PC は無いんでしょうけど。しかし、そのうち出てくるであろう次期 Windows .NET 環境オンリー前提のスーパーOS。アプリケーションは C# で書かれたものが殆どとなるでしょう。問題はいつ出てくるのかなのですが…。

C# に関しては 改訂版 C#入門(@IT) がとても参考になります。説明もわかり易いし、サンプルソースは短いし^^; 今まで他の言語にさわったことのある人であればすんなり入門できます。

ということで、今のうちから C# には慣れておいた方がいろいろ便利かなと思いますので、ぼちぼちやっていこうかと思います。若くも無いので覚えるのも大変です…。美しく設計出来るかどうかがポイントですかね。その為には言語仕様を把握しておくことが必須。ま、Delphi使いとしてはプロパティやインデクサは何の問題も無いですね! using 辺りはちょっと微妙になってきますが…。

Delphi を使って C# .NET アプリを作る時の注意点としては、実行と同時にソースが保存されること。これはイタイ…。保存せずには無理なんでしょうけど、その辺は IDE が面倒見てくれるとか、そういう方向でなんとか頑張って欲しい所です。ボーランド謹製の C# コンパイラが開発されれば可能になるかもしれませんが。あと、まだまだコンポーネントが少ないです。これでアプリを作るのは結構厳しいですね。多分何か方法はあるんでしょうけど。その辺りさえ何とかなれば(我慢すれば)一応開発出来る環境ではあります。そこまでするなら Delphi for .NET で作るか、いっそ Delphi for Win32 で作るかということになりそうではありますが…。一応書いておくと、Delphi for .NET で TMemo を一個フォームに配置してコンパイルした実行ファイルは 12KB という小さいものが出来上がりました。C# で richTextBox を貼り付けた実行ファイルは 8KB。Delphi for Win32 は悲しくなるので書きません^^;

さて、using 辺りが微妙と書きましたが、これはどういうことなのかを多少説明しておきます。using というのは「あるクラスを利用する時、スコープ外に処理が移った時に確実に終了処理を行わせる構文」という解釈で良いかと思います。Delphi で言う所の try - finally みたいな感じですが、違うのは try - finally では finally のブロック内にプログラマが自分で Class.Free と記述しなければならなかったという部分が、using では決められた処理(デストラクタでも無い Dispose)が自動で呼び出されるという動作になっている部分です。これにより、using を使っている限りクラス設計者の意向がそのまま反映されます。もちろん C# にも try - finally 構文がありますので、それを使ってプログラマが管理することも出来ます。Delphi の場合は「Create したら try - finally するべし」というプログラミングスタイルがある程度定着していたりしますので問題無い(?)訳ですが、C# の場合は基本的に GC 任せっぽいので、using を使ってプログラマが意図したタイミングでリソースの開放処理を行う必要が出てくる場合があります。ちなみに、インスタンスの開放はプログラマの任意のタイミングで行うことは出来ないっぽいです。マジですか!? Finalize メソッドはありますが残念なことに呼び出せません^^;

using を使うか、IFree とかの自作インターフェイスでも作ってちまちま try - finally するか、はたまた GC に全てを委ねるか。小さいアプリケーションなら GC 任せでも全く問題無いみたいですが(アプリケーション終了時にまとめて開放なので、駄目な場合もあります)、大きくなるとある程度は管理する必要があるでしょう。どうするのが良いんでしょうね…。