EventHandler事件举例

date
Jan 17, 2022
slug
10005
status
Published
tags
C#
summary
type
Post
1
using System;

class Publisher
{
    public event EventHandler SimpleEvent;//event delcaration
    public void RaiseTheEvent() { SimpleEvent(this, null); }//code that raises the event
}

class Subscriber
{
    public void MethodA(object o, EventArgs e) { Console.WriteLine("AAA"); }//event handler declarations
    public void MethodB(object o, EventArgs e) { Console.WriteLine("BBB"); }
}

class Program
{
    static void Main()
    {
        Publisher p = new Publisher();
        Subscriber s = new Subscriber();

        p.SimpleEvent += s.MethodA;//event registration订阅事件
        p.SimpleEvent += s.MethodB;
        p.RaiseTheEvent();

        Console.WriteLine("\r\nRemove MethodB");
        p.SimpleEvent -= s.MethodB;
        p.RaiseTheEvent();
    }
}
void IncrementDozensCount(object source, IncrementerEventArgs e)
  • The first parameter is meant to hold a reference to the object that raised the event. It is of type object and can, therefore, match any instance of any type.
  • The second parameter is meant to hold state information of whatever type is appropriate for the application.
using System;

public class IncrementerEventArgs : EventArgs // Custom class derived from EventArgs
{
    public int IterationCount { get; set; } // Stores an integer
}

class Incrementer
{
    public event EventHandler<IncrementerEventArgs> CountedADozen;

    public void DoCount()
    {
        IncrementerEventArgs args = new IncrementerEventArgs();
        for (int i = 1; i < 100; i++)
            if (i % 12 == 0 && CountedADozen != null)
            {
                args.IterationCount = i;
                CountedADozen(this, args);
            }
    }
}

class Dozens
{
    public int DozensCount { get; private set; }

    public Dozens(Incrementer incrementer)
    {
        DozensCount = 0;
        incrementer.CountedADozen += IncrementDozensCount;
    }

    void IncrementDozensCount(object source, IncrementerEventArgs e)
    {
        Console.WriteLine("Incremented at iteration: {0} in {1}", e.IterationCount, source.ToString());
        DozensCount++;
    }
}

class Program
{
    static void Main()
    {
        Incrementer incrementer = new Incrementer();
        Dozens dozensCounter = new Dozens(incrementer);

        incrementer.DoCount();
        Console.WriteLine("Number of dozens = {0}", dozensCounter.DozensCount);
    }
}

© Wen Bo 2021 - 2022