C#

僕がJavaを選ばなかった理由

先日、大学時代の後輩と久しぶりに会った。彼はSeasarのコミッタにもなっているとても優秀なJavaプログラマだ。その彼が、ビールを片手にこう尋ねた。「どうしてC#にしたんですか?Javaを選ばなかった理由って何かあるんですか?」僕は答えた。「Javaにはstr…

C# でイベントハンドラを yield return してみよう

以前、yield return に関してこんな記事を書いた。C# の yield return の使い道 - カタチづくり簡単に説明すると、直線作図の機能を下記のような状態遷移モデルで捉えて、これを IEnumerator を利用して実装しようと言う話。 この記事を受けて、実際に実装し…

.NET Framework 2.0 上で LINQ を使おう(再)

先日は恥ずかしいやら情けないやらで、このまま終わるのもナンなので・・・。System.Linq 周辺のソースコードは、下記のバッチファイルを実行すればmonoプロジェクトから取得できる(Subversionがインストールされていること前提)。 svn export http://anon…

C#3.0の拡張メソッドを使って As とか Switch/Case とかを作ってみた

As メソッドの巻 次のようなコードを書く機会が多い。obj が Hoge インスタンスかどうかを判定して、Hoge インスタンスの場合のみ何か特別な処理をしたいのだ。 Hoge hoge = obj as Hoge; if ( hoge != null ) { ... } しかし、どうもこのコードが気に入らな…

C#3.0とLINQでマンデルブロ集合を描いてみた

ただいまLINQ勉強中。無理やり(?)LINQを使ってマンデルブロ集合を描いてみたよ、という話。LINQ面白いよLINQ。 マンデルブロ集合の定義をWikipediaから引用しておく マンデルブロ集合(まんでるぶろしゅうごう、Mandelbrot set)とは、 次の漸化式 で定義…

C# の yield return の使い道

突然ではありますが、とっておきの yield return の使い道を紹介しようぢゃないか。・・・って別にそんなたいそうなものじゃないけどね。まず、IEnumerator ってのは次のような状態遷移モデルで捉えることが出来るわけだ。逆に考えると、状態遷移でモデル化…

readonly な struct に気をつけろ

軽くハマったので、メモ。 本当は怖い readonly な struct、の巻。 using System; // 値型(struct)であることがミソ struct Counter { public int Value; public void Increment() { ++Value; } } // Counter を readonly で保持していることがミソ class …

longのハッシュコード

longのハッシュコードにヤられたー。いやまあ、分かってみれば当たり前のことで単に僕が無知でしたってだけの話ではあるのだけれど、long値(64bit整数)の GetHashCode() が何を返すか僕は知らなかったわけで、そのせいで Dictionary の検索がめちゃくちゃ…

リフレクションで値型(struct)のデフォルトコンストラクタが取得できない

ハマッたのでメモ。結論から書くと、Activator.CreateInstance() を使用すればよい。サンプルとして下記のクラスと構造体を用意する。 class SampleClass {} struct SampleStruct {} コイツらのインスタンスをリフレクションで生成したい。つまり、typeof( S…

ヒスイ1.3リリース

C# による OpenGL フレームワーク「ヒスイ」の Ver1.3 を公開した。 http://www.quatouch.com/products/hisui/index.html ダウンロードはこちら。 http://www.quatouch.com/products/hisui/hisui-1_3_0_0-20070625.zip 1.2から色々と変更したので、更新履歴…

イベント処理中にイベントハンドラを削除したらどうなるか

さて問題です。次のコードを実行すると、コンソールには何が表示されるでしょう?もっと言うと、コンソールに "Handler2" は表示されるでしょうか、表示されないのでしょうか。 using System; class Foo { static event EventHandler Event; static void Mai…

static フィールドの初期化のタイミング

.NET には beforefieldinit というフラグがあることをはじめて知った。 beforefieldinitフラグ - easy work, easy life検索してみると、Insider.NET にも似たような話題が挙がっていた。 「開発環境とEXEとでstatic領域の初期化タイミングがちがう」(1) In…