using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace EventClock
{
public class ClassWithDelegate
{
//封装了一个返回值为int的多重委托方法
public delegate int DelegateThatReturns();
public DelegateThatReturns theDelegate;
public void Run()
{
for (; ; )
{
Thread.Sleep(500);
if (theDelegate != null)
{
//显式调用每个委托方法
foreach (DelegateThatReturns del in theDelegate.GetInvocationList())
{
int result = del();
Console.WriteLine("Delegates fired! return result: {0}",result);
}
Console.WriteLine();
}
}
}
}
public class FirstSubscribe
{
private int myCounter = 0;
public void Subscribe(ClassWithDelegate theClassWithDelegate)
{
theClassWithDelegate.theDelegate += new ClassWithDelegate.DelegateThatReturns(DisplayCounter);
}
public int DisplayCounter()
{
return ++myCounter;
}
}
public class SecondSubscribe
{
private int myCounter = 0;
public void Subscribe(ClassWithDelegate theClassWithDelegate)
{
theClassWithDelegate.theDelegate += new ClassWithDelegate.DelegateThatReturns(Doubler);
}
public int Doubler()
{
return myCounter += 2;
}
}
class Program
{
static void Main(string[] args)
{
ClassWithDelegate theClassWithDelegate = new ClassWithDelegate();
FirstSubscribe fs = new FirstSubscribe();
fs.Subscribe(theClassWithDelegate);
SecondSubscribe ss = new SecondSubscribe();
ss.Subscribe(theClassWithDelegate);
theClassWithDelegate.Run();
Console.ReadLine();
}
}
}
C#_delegate - 有返回值手工调用
最新推荐文章于 2025-03-26 15:08:39 发布