オノデラの研究日記 in わんくま

思いついたネタを気ままに書いていくブログ

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  209  : 記事  5  : コメント  689  : トラックバック  40

ニュース

プロフィール

  • ●おのでら
    宮城県在住
    主に業務向けソフトを製作

Twitter

ニュース

主なリンク

XNA 関連リンク

アイテム

ゲーマーカード

その他

記事カテゴリ

書庫

日記カテゴリ

 通常戻り値をもつようなイベントハンドラを定義することはほとんどないかと思いますが、実際に戻り値を持つイベントハンドラを定義し、複数のメソッドを呼び出すようにした場合、戻り値がどのようになるかを調べてみました。

using System;
using System.Collections.Generic;
using System.Text;

namespace Delegate戻り値複数コール
{
    class Program
    {
        static void Main(string[] args)
        {
            ClassA classA = new ClassA();

            classA.CallEvent += delegate(object sender, EventArgs args1)
            {
                Console.WriteLine("1番目のコール「1」を返します。");
                return 1;
            };

            classA.CallEvent += delegate(object sender, EventArgs args2)
            {
                Console.WriteLine("2番目のコール「2」を返します。");
                return 2;
            };

            Console.WriteLine("「" + classA.CallMethod().ToString() + "」が返りました。");
        }
    }

    class ClassA
    {
        public delegate int EventHandler(object sender, EventArgs args);

        public event EventHandler CallEvent = null;

        public int CallMethod()
        {
            return CallEvent(this, null);
        }
    }
}

 下が実行した結果です。

1番目のコール「1」を返します。
2番目のコール「2」を返します。
「2」が返りました。
続行するには何かキーを押してください . . .

 どうやら一番最後に呼び出されたメソッドの戻り値が戻ってくるようですね。

 ちなみに VB.NET のコードも載せようかと思ったんですが、 VB.NET の方はコンパイラが「戻り値を定義したイベントハンドラは使用できません」と文句を言ってきました。VB.NET ではできなうようです。

 .NET Framework では戻り値をもつようなイベントハンドラを使わずにイベント引数「xxxEventArgs」に値をセットして返すのが定石ですね。

投稿日時 : 2007年10月8日 12:08

コメント

# re: C# - 複数のイベントハンドラをセットしたメソッドを呼び出したときの戻り値 2007/10/08 20:20 中博俊
eventは複数用なので、delegateをそのまま使うのが吉

# re: C# - 複数のイベントハンドラをセットしたメソッドを呼び出したときの戻り値 2007/10/08 21:09 オノデラ
> eventは複数用なので、delegateをそのまま使うのが吉

なるほど。event を使わない場合は代入形式でセットできるんですね。ここらへんあいまいなまま使っていました。(^^;)

-------------------------
[ClassA]
//public event EventHandler CallEvent = null;
public EventHandler CallEvent = null;
-------------------------
[main]
//classA.CallEvent += delegate(object sender, EventArgs args1)
//{
// Console.WriteLine("1番目のコール「1」を返します。");
// return 1;
//};
classA.CallEvent = delegate(object sender, EventArgs args1)
{
Console.WriteLine("1番目のコール「1」を返します。");
return 1;
};


# Oakley Sunglasses Cheap 2013/03/23 17:41 http://www.cancunsemanasanta.com/oakley-sunglasses
He is crazy about Crazy EnglishI am afraid that l have to go.Wake me up at five thirty.He came out of the library, a large book under his arm.Give me a hand!Tom and Mary congratulated us on the birth of our daughter.Tom and Mary congratulated us on the birth of our daughter.His looks are always funny.she has been cranky all day.hind your light under a bushel.

Post Feedback

タイトル
名前
Url:
コメント