初学者にとってデリゲートの理解は大変だということで記事にしました。 対象は、VB, C#を勉強し始めて、デリゲートの構文は何となくわかるけど・・・・って人です 一部、説明のためにゴチャゴチャっとした部分を投げ捨てて簡単(にしすぎているかもしれませんが)にしています そもそもメモリ上では何が起きている? よく、皆さんはこんなコードを書いていると思います
![デリゲート(delegate)の説明(VB, C#) - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/693048077c0a39f672499d662387c0a9b2bbb789/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgzJTg3JUUzJTgzJUFBJUUzJTgyJUIyJUUzJTgzJUJDJUUzJTgzJTg4JTI4ZGVsZWdhdGUlMjklRTMlODElQUUlRTglQUElQUMlRTYlOTglOEUlMjhWQiUyQyUyMEMlMjMlMjkmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPTYxOGNjM2U1Y2Q1YTEyN2Y5OGUxZTNiNDY4NmZmOTk5%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBVV0NvbnRyb2wmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWI3ZjBmYjE0YjdhY2I5Y2RmMjg5ZDgwM2IxZWQxYzBm%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D399c2942a842b90f5037e17a5828c800)
複数ボタンに対応するハンドラ イベントの価値を実感するために、もう1個のサンプルソースを見てみよう。まず、上記のサンプルと同様に新しいWindowsプロジェクトを作り、フォーム上に3個のボタンを貼り付ける。 1: using System; 2: using System.Drawing; 3: using System.Collections; 4: using System.ComponentModel; 5: using System.Windows.Forms; 6: using System.Data; 7: 8: namespace WindowsApplication3 9: { 10: /// <summary> 11: /// Form1 の概要の説明です。 12: /// </summary> 13: public class Form1 : Syste
ウィンドウにおけるイベントの使われ方 イベントが最も活躍するのはウィンドウのイベント処理だろう。実際の使われ方を見てみよう。以下のサンプルは以下のように作成している。まず、新規プロジェクトで、Windowsアプリケーションを選ぶ。そして、フォーム上にボタンを1個張り付ける。 1: using System; 2: using System.Drawing; 3: using System.Collections; 4: using System.ComponentModel; 5: using System.Windows.Forms; 6: using System.Data; 7: 8: namespace WindowsApplication2 9: { 10: /// <summary> 11: /// Form1 の概要の説明です。 12: /// </summary
独自のハンドラ管理 通常、イベントへのハンドラの追加と削除は、システム側がお膳立てを用意していてくれるため、自分でコードを書く必要もなければ、詳細を知る必要もない。しかし、ハンドラの管理をプログラマが自分で記述することもできる。以下が、その方法を示した例である。 1: using System; 2: using System.ComponentModel; 3: 4: namespace ConsoleApplication57 5: { 6: public delegate void SampleEventHandler(object sender, EventArgs e); 7: class Class1 8: { 9: public static event SampleEventHandler sampleEvent 10: { 11:
さてさて、この blog、基本的には玄人向けに濃い話題ばっかり書いていたのですが、実は最近、新人さんの方々にも割と読んでいただいていることが判明。ちょ、さすがにぜんぜん意味不明なエントリが多いのでは?? とか思ったりするのですが、そんな感じだとたまには割と入門者向けのエントリも書いてみたくなります。そんなわけで、今日はたまには基本に立ち返って、スレッドとオブジェクトインスタンスの話題を書いてみます。このネタを取り上げようと思ったのは、ある人からの質問メール。(ちょっと微修正しましたが^^) 「最近、3 階層のアプリケーションを、課題で作っていたんですよ。 そして、その UI 層の入力チェックメソッドを、 メンバメソッドにすべきか static メソッドにするかを考えていて、 ふと気になったことがあります。 static メソッドだと、メンバメソッドと違って、毎回インスタンスを 生成する必要
重要 一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。 public delegate void EventHandler(System::Object ^ sender, EventArgs ^ e); public delegate void EventHandler(object sender, EventArgs e); public delegate void EventHandler(object? sender, EventArgs e); [System.Serializable] public delegate void EventHandler(object sender, EventArgs e); [System.Ser
以下の手順では、クラスにイベントを実装する方法について説明します。 最初の手順では、関連付けられたデータを持たないイベントを実装します。このイベントは、イベント データとして System.EventArgs クラスを使用し、デリゲート ハンドラーとして System.EventHandler クラスを使用します。 2 番目の手順では、カスタム データを持つイベントを実装します。このイベントは、イベント データおよびイベント ハンドラーのカスタム クラスを定義します。 注意 ここでは、クラスでイベントを宣言する方法と発生させる方法について説明します。そのイベントを処理するイベント ハンドラーの定義方法については説明しません。イベントを処理する方法については、「イベントの利用」および「方法 : イベントを発生させる/処理する」を参照してください。 イベントの発生と処理を説明する詳細なサンプル
アプリケーションでイベントを利用するには、イベントに応答してプログラム ロジックを実行するイベント ハンドラー (イベント処理メソッド) を用意し、そのイベント ハンドラーをイベント ソースに登録する必要があります。 この処理をイベント接続と呼びます。 Windows フォーム用および Web フォーム用のビジュアル デザイナーには、イベント接続の詳細を簡単にしたり、隠したりするための、RAD (Rapid Application Development) ツールが用意されています。 このトピックでは、イベント処理の一般的なパターンについて説明します。 .NET Framework でのイベント モデルの概要については、「イベントとデリゲート」を参照してください。 Windows フォームでのイベント モデルの詳細については、「方法 : Windows フォーム アプリケーションでイベント
C#のイベント機能とは何か? C#のイベント機能は、あるクラスで発生した出来事を,あらかじめ登録された一群のメソッドに対して、1回の呼び出しによって、ですべて伝える機能と言える。と言っても、こんな説明ではさっぱり分からないという人が大半だと思うので、今回は実例を見ながら、1つずつイベント機能の使い方と、使う意義を探ってみたい。なお、イベントはデレゲートと呼ばれる機能を活用して使用するため、今回の説明の中には実はデレゲートを説明している部分がある。しかし、C#プログラミングでは、デレゲートを単体で使う機会よりも、イベントとして使う機会の方が遥かに多いのである。デレゲート単体を使いこなす能力は必ずしも要求されないが、イベントはウィンドウアプリケーションなどを記述すると絶対に避けては通れないのである。そのため、今回はイベントとして一括して扱った。より詳しいデレゲート単体の解説は、いずれこの連載で
この記事の目的 今までなんとな~くでやれてきちゃったけど、とうとう逃げられなくなって明日までにデリゲートとイベントハンドラ使えるようにしなきゃいかん!という人向けの、復習記事です。 こいつらのポイントを理解して、 ①何故コードが動かないのか ②どうしたらコードが動くようになるのか 上記二点の仮説を立てられる位になることを目指します。 対象読者 ・今までイベントハンドラやる機会なかったけど、明日やらなきゃいけなくなった ・イベント周りの処理よくわかってないけど動くからいいや~って気持ちでいたら、とうとう何やっても動かなくなった ・全部気合で乗り切ってきたけど、気合だけでは乗り切れなくなった そんなあなたのための記事です。 復習① デリゲートってなんだっけ? delegate:委譲、譲渡 用語の意味なんかどうでもいいですね。 デリゲートは、メソッドをオブジェクトの一種として使うことができる機能
Visual C# で新しいプロジェクトを作って、フォームデザイナで何もないフォームの上にツールボックスからボタンを一個だけ貼り付けてみよう。作製された button1 を選択してダブルクリックすると、Form1.cs が開かれてbutton1 の Click に対応するシグラナルハンドラ、 private void button1_Click(object sender, EventArgs e) が、自動的に作成されている。ここに、ボタンがクリックされた時のプログラムを記述していけばいいのだが、このイベントハンドらには、object 型の sender と EventArgs 型の e という二つの引数が渡されている。 どんな引数が返されているかを調べるには、オブジェクトのToString() メソッドを利用するのが便利だ。 例えば、sender の内容を知るためには、Form1 に
質問 2012年12月17日月曜日 1:06 EventHandler内で、イベントを発生させたオブジェクト(クラスのメンバ)を参照したい場合、メンバとsenderのキャスト、どちらが好ましいでしょうか。 つまり、下のようなクラスでは、obj.MyEventのイベントハンドラとして、obj_MyEvent1とobj_MyEvent2のどちらのように書くのが好ましいでしょうか。その理由もご教授ください。 class sample { private EventSourceClass obj; private void obj_MyEvent1(object sender, EventArgs e) { this.obj.DoSomething(); } private void obj_MyEvent2(object sender, EventArgs e) { ((EventSourceC
イベントハンドラとはなんぞや。 イベントハンドラは、デリゲートです。 (デリゲートよく分からねーって人はコチラ。) 百聞は一見に如かず。 まずは、Windowsフォームアプリケーションを作成して、Formにボタンをひとつ配置して、ボタンをダブルクリックするなりしてイベントハンドラを自動生成し、MessageBoxを置く。 ボタンを押せば、Hellowとメッセージボックスが開く。 private void button1_Click(object sender, EventArgs e) { MessageBox.Show("Hellow"); } ところで、このbutton1_Clickメソッドはなぜ、動くのか。 このメソッドを参照すると、下記のようにコードが自動生成されている。 this.button1.Click += new System.EventHandler(this.butt
イベント ハンドラーは、イベントにバインドされているメソッドです。 イベントが発生すると、イベント ハンドラー内のコードが実行されます。 各イベント ハンドラーには、イベントを適切に処理するための 2 つのパラメーターが用意されています。 次の例は、Button コントロールの Click イベントのイベント ハンドラーを示したものです。 Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click End Sub private void button1_Click(object sender, System.EventArgs e) { } private: void button1_Click(System::Object ^ se
更新 : 2007 年 11 月 アプリケーションでイベントを利用するには、イベントに応答してプログラム ロジックを実行するイベント ハンドラ (イベント処理メソッド) を用意し、そのイベント ハンドラをイベント ソースに登録する必要があります。この処理をイベント接続と呼びます。Windows フォーム用および Web フォーム用のビジュアル デザイナには、イベント接続の詳細を簡単にしたり、隠したりするための、RAD (Rapid Application Development) ツールが用意されています。 このトピックでは、イベント処理の一般的なパターンについて説明します。.NET Framework でのイベント モデルの概要については、「イベントとデリゲート」を参照してください。Windows フォームでのイベント モデルの詳細については、「方法 : Windows フォーム アプリ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く