C#のDelegateとは

先日の記事で C#のdelegateについてちらっと触れた。

C#のDelegateというのは、簡単に説明すると、C/C++での関数ポインタで、
イベントハンドラなどに利用される。

ただ、C/C++の関数ポインターとは大きく異なる点(拡張された点)が少なくとも2つあり、
まともに使いこなすならこの2点を抑えないといけない。

1つめは、インスタンスメソッドを参照できる点。
C++ではstaticなメソッドしか参照できなかったので、
第1引数にthisを渡すなどして回避していた物が割と柔軟に対応できます。

2つめは、複数のメソッドを割り当てることが出来る点。
C/C++はあくまでもプログラムの場所を指し示す物、
もっと低レベルで言うならば、指定された関数のメモリー上のアドレスを指定していたわけですが、
そのため、複数の関数を関数ポインターに渡すことは出来ませんでした。
Delegateは、複数のメソッドを指定できる画期的な機能があります。

この2点が、関数ポインターとの大きな違い。

慣れてくるとかなり便利。

遠隔操作の容疑者曰く「C#は使えない」

また、遠隔操作事件ネタ。

高木ひろみちゅ先生によれば、容疑者は

②「自分はウイルス作成に使われた言語を使うことができない」

http://togetter.com/li/456852
と主張しているそうな。

Ω ΩΩΩ<ナ・ナンダッテー

確か、件の事件はC#で書かれていたワケだけど、
C#を容疑者が使えるという事の立証責任が警察に生じたわけだ。

なかなか面白い展開になってきた。

もっとも、C#を使えないことを証明するのは難しい(悪魔の証明)けど、
C#を使える証明は意外と簡単。

C/C++/Javaなど、C言語の流れを持った言語を知っていればC#は使える。

ただ、今回の騒動のプログラムがC#のDelegate機能とかを使っていたりすると、
CやC++の関数ポインター的な知識が必要で、
C#を専門に学習したり、CやC++をかなり熟知した人間じゃないといけないなど、
問題のプログラムの内容に応じて、合理的疑いを越えるための、証明をするハードルが変わる。

なんにせよ、どんどん面白くなってきた。

ここで、真犯人を名乗る人間が、
「マテ、それは誤認逮捕だ」
と、メールでも送ってきたらさらに面白いことになるけど、
さすがにそれは無いかなぁ・・・

C#でZipファイルを扱う方法

そうそう、電子書籍の自分用Viewerを作るついでに、
WPFでZIPを使う方法を調べた。

ライセンス的に、DotNetZipを使うのが楽(Ms-PLライセンスらしい)みたいなのでまず、これを落としてくる。
http://dotnetzip.codeplex.com/
【続きを読む】

IOCCCが5年ぶりに開催

IOCCCが5年ぶりに開催されるらしい
ニュース:http://news.mynavi.jp/news/2011/11/17/033/
公式:http://www.ioccc.org/

そういえば、昔、当Blogでも記事にしたけど、
読みにくいC言語のプログラムを書く事を目的としている大会で
日本語では「国際邪悪なCコードコンテスト」と呼ばれている大会。

というわけで、難読なHelloWorldをC++で書いてみた。
【続きを読む】

|