/// <summary>
/// 静态调用
/// </summary>
private static void StaticDelegateDemo()
{
Console.WriteLine("---------委托调用静态方法------------");
Counter(1, 10, null);
Counter(1, 10, new Feedback(FeedbackToConsole));
}
/// <summary>
/// 实例调用
/// </summary>
private static void InstanceDelegateDemo()
{
Console.WriteLine("---------委托调用实例方法------------");
Program p = new Program();
Counter(1, 10, null);
Counter(1, 5, new Feedback(p.InstanceFeedbackToConsole));
}
5. 查看控制台信息
完整代码:
class Program
{
// 定义委托,并引用一个方法,这个方法需要获取一个int型参数返回void
internal delegate void Feedback(int value);
static void Main(string[] args)
{
StaticDelegateDemo();
InstanceDelegateDemo();
Console.ReadKey();
}
/// <summary>
/// 静态调用
/// </summary>
private static void StaticDelegateDemo()
{
Console.WriteLine("---------委托调用静态方法------------");
Counter(1, 10, null);
Counter(1, 10, new Feedback(FeedbackToConsole));
}
/// <summary>
/// 实例调用
/// </summary>
private static void InstanceDelegateDemo()
{
Console.WriteLine("---------委托调用实例方法------------");
Program p = new Program();
Counter(1, 10, null);
Counter(1, 5, new Feedback(p.InstanceFeedbackToConsole));
}
/// <summary>
/// 静态回调方法
/// </summary>
/// <param name="value"></param>
private static void FeedbackToConsole(int value)
{
// 依次打印数字
Console.WriteLine("Item=" + value);
}
/// <summary>
/// 实例回调方法
/// </summary>
/// <param name="value"></param>
private void InstanceFeedbackToConsole(int value)
{
Console.WriteLine("Item=" + value);
}
}
启动控制台:可以看到已经成功把数字打印出来了

6. 委托链:
委托链是委托对象的集合。可以利用委托链调用集合中的委托所绑定的全部方法。继续在原有的基础上添加委托链的方法。
新添加的两个方法本质上没有区别都是对委托链的实现,不同的是写法,明显是第二个方法更加精简一些。这是因为C#编译器重载了+=和-=操作符,这两个操作符分别调用Combine和Remove。
/// <summary>
/// 委托链调用 1
/// </summary>
/// <param name="p"></param>
private static void ChainDelegateDemo(Program p)
{
Console.WriteLine("---------委托链调用1------------");
Feedback fb1 = new Feedback(FeedbackToConsole);
Feedback fb2 = new Feedback(p.InstanceFeedbackToConsole);
Feedback fbChain = null;
fbChain = (Feedback)Delegate.Combine(fbChain, fb1);
fbChain = (Feedback)Delegate.Combine(fbChain, fb2);
Counter(1, 3, fbChain);
Console.WriteLine();
fbChain = (Feedback)Delegate.Remove(fbChain, new Feedback(FeedbackToConsole));
Counter(1, 3, fbChain);
}
/// <summary>
/// 委托链调用 2
/// </summary>
/// <param name="p"></param>
private static void ChainDelegateDemo2(Program p)
{
Console.WriteLine("---------委托链调用2------------");
Feedback fb1 = new Feedback(FeedbackToConsole);
Feedback fb2 = new Feedback(p.InstanceFeedbackToConsole);
Feedback fbChain = null;
fbChain += fb1;
fbChain += fb2;
Counter(1, 3, fbChain);
Console.WriteLine();
fbChain -= new Feedback(FeedbackToConsole);
Counter(1, 2, fbChain);
}










