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);
}
}