DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Delegateについて

  • 題名: Delegateについて
  • 著者: lip
  • 日時: 2008/06/18 18:17:15
  • ID: 22302
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[WindowsXP C#2005]
分類:[.NET]

Delegateの使い方を勉強しようと思い、色々なHPを見ながら
以下のようなサンプルを作ってみました

delegate void Test();

public class ClsTest {
public void output() {
Console.WriteLine("ClsTest.output");
}
}

public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
ClsTest a = new ClsTest();
Test test = aaa;
test += bbb;
test += a.output;
test();
}
private void aaa() {
Console.WriteLine("aaa");
}
private void bbb() {
Console.WriteLine("bbb");
}
}

???、ソースも読みにくくなるし、これ何がいいんだろていうのが
感想です

自分のおバカな頭ではこういうことに使える!とか出てきませんorz
そこで聞きたいのがDelegateはこういう時に使えるていうのを
教えて欲しくて投稿してみました

参考になるHPや本など教えて下さいm(__)m
■No22302に返信(lipさんの記事)
> そこで聞きたいのがDelegateはこういう時に使えるていうのを
> 教えて欲しくて投稿してみました
>
> 参考になるHPや本など教えて下さいm(__)m
>

C#のdelegateはクラス間の依存性を切り離す効能を持つか?
http://mag.autumn.org/Content.modf?id=20040310151444
2008/06/18(Wed) 19:51:26 編集(投稿者)

私の手元の文献に1つありました。
 
「元に戻す」操作の実装例
  日経BPソフトプレス刊「プログラミングVisualBasic2005言語編(下)」、pp. 416 - 421.
(圧巻はpp.417の、「もちろん、このようにしてメソッドを実行することに利点はありません。このテクニックの威力が明らかとなるのは〜」のくだりです)
<追記>
失礼しました。上記文献の例は、Delegateではなく、リフレクションを使用しています。
Delegateを使用したUndo実装例は、例えばこちらのスレッドの Hirotow さんのコードが大変参考になります。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=13275&KLOG=28
</追記>
 
他の例では、直近のものでは、こちらのスレッドの じゅで さんのコメントが大変参考になります。
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=22260&rev=&no=0
  • 題名: Re[3]: Delegateについて
  • 著者: lip
  • 日時: 2008/06/20 18:25:16
  • ID: 22339
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
返信ありがとうございました。

教えてもらったHPを見る時間が取れなくて時間がかかって、すいませんでした


>他の例では、直近のものでは、こちらのスレッドの じゅで さんのコメントが大変参考になります。
>http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=22260&rev=&no=0

自分にとって分かりやすかったのがここでした。
サンプルを作っていろいろ遊んでみたら、らくちんだて思いました
Delegateの便利さが少しは、分かった気がします^^;
もっと勉強してうまく使えるようにがんばりたいと思います。
ありがとうございました。

一応作ったサンプル---------------------

delegate void Test();

public partial class Form1 : Form
{
private Test func = null;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (func != null) {
func();
}
}
private void aaa()
{
textBox1.Text = "aaa";
}
private void bbb()
{
textBox2.Text = "bbb";
}
private void ccc()
{
textBox3.Text = "ccc";
}
private void textBox_Enter(object sender, EventArgs e)
{
if (sender == textBox1) {
func = aaa;
}
else if (sender == textBox2) {
func = bbb;
}
else if (sender == textBox3) {
func = ccc;
}
}
}
------------------------------------------

DOBON.NET | プログラミング道 | プログラミング掲示板