2013-02-04から1日間の記事一覧

デリゲート型の変数に関数を複数登録する

C#

プログラミングC# 第6版を読んでいて気付いたんですが、「+=」での関数登録は何もイベントだけの特殊機能ではないんですね。その辺詳しく書いてなかったので今まで勘違いしていました。 using System; delegate void CDelegate (); class Program { static v…

イベントの処理順は保障されていない

C#

プログラミングC# 第6版 5.8 追加した順序と同じ順序でイベントハンドラが実行されていることに気付かれたかもしれません。しかし常に順序が同じになることは保障されていないので、この挙動に依存したコードを作成してはいけません。 なるほど、つまり以下…

独自のイベント引数を作る

C#

プログラミングC# 第6版 5.8 イベントの続きです。前回キャンセル用のイベント引数CancelEventArgsについて勉強しましたが、このイベント引数は独自に定義することもできます。というわけでCancelEventArgsと同じくCancelを持つ独自のイベント引数を作ってみ…

イベントをキャンセルさせるCancelEventArgs

C#

プログラミングC# 第6版 5.8 イベント処理を途中でキャンセルさせる方法ですね。 using System; using System.ComponentModel; // CancelEventArgsのために必要 class CClass { // CancelEventArgsを使うためにジェネリックにする public event EventHandler<CancelEventArgs></canceleventargs>…

初めてのイベント

C#

プログラミングC# 第6版 5.8 またまた難しそうな話ですねぇ。ってことでイベントです。要するに予め関数に対してここに処理を割り込ませることができますよ、と宣言しておいて、後からさまざまな処理を割り込ますことができる、と。こんな感じですかねぇ。兎…

クロージャでデリゲート

C#

プログラミングC# 第6版 5.7 これもデリゲートがらみですね。クロージャ、と何やら新しい名称が出てきました。匿名メソッド内で外部で定義された変数を使用することで、その変数が匿名メソッドが存在する間ずっと参照可能な状態のことを言うそうです。言葉だ…

Funcでデリゲート

C#

プログラミングC# 第6版 5.7 まだまだ続きますよ!デリゲートの話です。Funcというのがでてきました。これは戻り値がTResult型で引数がT型のデリゲートのことです。つまり今まで出てきたActionやPredicateはこのFuncで表せることになります・・・・・、って…

ラムダ式でデリゲート

C#

プログラミングC# 第6版 5.5 匿名メソッドでデリゲートの続きですね。 using System; public delegate int CDelegate (int i); class Program { static void Main () { CDelegate dobj = (int i) => { return i + 1; }; Console.WriteLine( dobj(1) ); } } $…

匿名メソッドでデリゲート

C#

プログラミングC# 第6版 5.4 またも引き続きデリゲートの話です。匿名メソッドというものが出てきました。関数名を持たない関数のことのようです。つまり匿名メソッドを定義してデリゲート型の変数に代入した場合、その変数以外から匿名メソッドにアクセスす…

Predicateでデリゲート

C#

プログラミングC# 第6版 5.3 引き続きデリゲートの話です。Predicateとは戻り値がbool型で引数がT型のデリゲートとのことです。使い方としてはActionとほぼ同じなんですが一応確認しておきます。 using System; class Program { public static bool Foo (int…

Actionでデリゲート

C#

プログラミングC# 第6版 5.2 引き続きデリゲートの話です。Actionというのはジェネリック型というものらしいです。今まででも既にListとか登場してましたね。でActionを使ってデリゲートとのことなんですが、まずジェネリックについて先に説明してくれないん…

オブジェクトメソッドでもデリゲート

C#

プログラミングC# 第6版 5.1 前回の記事で関数をデリゲートで呼ぶ処理を勉強しましたが、関数だけでなくオブジェクトのメソッドすらもデリゲートとして登録することができます。 using System; delegate void CDelegateClass (int i); class Hoge { public s…

機能が同じなら一緒に扱え、デリゲートによる関数合成

C#

プログラミングC# 第6版 5.1 デリゲートというものが出てきました。本では長々と説明があったのですが、要するにC++でいうところの関数ポインタってところですね。否。その認識は間違いです。確かに関数ポインタに似てるんですが、実際はちょっと違います。…