1
class Program
{
    public delegate void mydel();
    public static event mydel myevent;

    static void del()
    {
        Console.WriteLine("Called in del");

    }

    static void Main(string[] args)
    {
        myevent = del;
        myevent += new EventHandler(del);
        myevent();
        Console.ReadLine();

    }
}

myevent += new Eventhandler(del);この行は機能しません...エラー「「del」のオーバーロードがデリゲート「System.EventHandler」に一致しません」が生成されます

4

3 に答える 3

0

問題はラインにあります

myevent = del;
myevent += new EventHandler(del);

それらを削除してシンテックスを置き換えるだけです。

イベントに登録する正しい構文は次のとおりです。

myevent += new mydel(del);

また

myevent += del;

しかし、あなたがしたようではありません

myevent = del;

また、イベントを呼び出す前に、それが null でないことを常に確認する必要があります。

したがって、コードは次のようになります。

class Program
{
    public delegate void mydel();
    public static event mydel myevent;

    static void del()
    {
        Console.WriteLine("Called in del");

    }

    static void Main(string[] args)
    {
        myevent += new mydel(del);

        if(myevent != null)
        {
           myevent();
        }

        Console.ReadLine();

    }
}

イベントと登録の詳細については、こちらをご覧ください。

+= 演算子は、パブリッシャーのイベント ハンドラーの呼び出しリストにデリゲート インスタンスを追加するために使用されます。複数のサブスクライバーがイベントに登録できることを忘れないでください。+= 演算子を使用して、現在のサブスクライバーを基になるデリゲートの呼び出しリストに追加します。

于 2013-09-09T10:30:54.407 に答える