您的位置:首页 > 编程语言 > C#

C#_delegate - 有返回值手工调用

2013-09-27 00:02 423 查看
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#