トップ «前の日記(2004-12-19) 最新 次の日記(2004-12-21)» 編集

日々の破片

著作一覧

2004-12-20

_ C#で遊ぶ

ネタ

ネタをダウンロードしてディレクトリ付きで展開するとgaveというディレクトリが作成される。

bin\debugにはビルド済み実行ファイル(gave.exe)が入っているが、gave直下のslnやcsprojをダブルクリックしてVS.NETを起動しても良い(というか、VS.NET2003を持っていればそうすべきだと思う)。VS.NET2003で作成したので、2005ベータとか2002とかでどうなるかは知らない。

実行するとボタンが1個のウィンドウが表示される。

ボタンをクリックすると、拡張子cssのファイルを読もうとするので、読ませてやる。cssと言ってもカスケーディング(カスケードだっけ?)スタイルシートじゃない。C#スクリプトの略だ。

たとえばこんなのだ。

// cv.css
Pen p = new Pen(Color.Blue);
for (int x = 0; x < panel.Width; x += 20)
{
    g.DrawLine(p, x, 0, x, panel.Height);
}

すると次のように画面が変わることが確認できる。

逆に次のファイルを読ませると次のように画面が表示される。 って、この表示はバグだから、左端の行番号から6を引くこと(1行目から開始したければ5を引くこと――提示しているソースは先頭行にファイル名を示すコメントが入っているがプログラム的には存在しない行として考えること。ソースを読めば理由はわかる)。

// cve.css
SolidBrush b = new SolidBrush(Color.Redx);
g.FillRectangle(b, 0, 0, panel.Width, panel.Heihgt);

cv.css、cve.cssのいずれもC#で記述した単なるテキストファイルだ。標準とちょっと異なるのは、クラスやメソッドが無いこと、g(Graphicsクラスのインスタンス)およびpanel(Panelクラスのインスタンス)に対しての参照が用意されている点だ。

これは何か?

C#スクリプティングホスト?

確かに、Activeスクリプティングホストに似ているとは言える。が、.NET Frameworkではこういった処理は簡単に記述できるので、似ているのは単に表れ方だけだ。実際には大したプログラムではないのでネタのgave自体の解説は不要だろう。

ちなみにASP.NETはこれをもっときちんと設計した環境だが、技術的には同じような仕組みで実装されている(はずである)。

ブラックジャックを読むと、自分で自分を手術するシーンがあって、すごくシビレル。ここで示したプログラムは、自分が読み込んだ自分の外部にあるスクリプトによって自分を操作させるという意味で、自己手術に似た感覚が味わえる。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え