该例子摘自:《C#程序设计教程》--朱毅华等 第132页
using System;
using System.Collections.Generic;
using System.Text;
namespace Delegate
{
public class WorkerClass
{
public int InstanceMethod(int nID, string sName)
{
int retval = 0;
retval = nID * sName.Length;
Console.WriteLine("调用InstanceMethod方法");
return retval;
}
public static int StaticMethod(int nID, string sName)
{
int retval = 0;
retval = nID * sName.Length + 2;
Console.WriteLine("调用StaticMethod方法");
return retval;
}
public delegate int SomeDelegate(int nID, string sName); //--参数等必须和要指向的方法一样
static void Main(string[] args)
{
WorkerClass wr = new WorkerClass();
SomeDelegate d1 = new SomeDelegate(wr.InstanceMethod); //--只是挂钩,尚未执行InstanceMethod方法
Console.WriteLine("Invoking delegate InstanceMethod, return={0}", d1(5, "aaa")); //--先调用执行InstanceMethod方法,再执行该Console方法;
SomeDelegate d2 = new SomeDelegate(WorkerClass.StaticMethod);
Console.WriteLine("Invoking delegate StaticMethod, return={0}", d2(5, "aaa"));
Console.WriteLine("...........");
Console.WriteLine("测试多播......");
SomeDelegate d3 = d2 + d1; //--按组装的次序来进行调用;先执行d2,再执行d1
Console.WriteLine("d1 And d2 return={0}", d3(5, "aaa"));//--按组装的次序来进行调用;先执行d2,再执行d1
Console.WriteLine("..................................");
int num_method = d3.GetInvocationList().Length;
Console.WriteLine("Number of Methods d3:{0}", num_method);
d3 = d3 - d2;
Console.WriteLine("d3 - d2 return={0}", d3(5, "aaa"));
Console.WriteLine("..................................");
num_method = d3.GetInvocationList().Length; //--该委托里还有几个方法;
Console.WriteLine("Number of Methods d3:{0}", num_method);
Console.ReadKey();
}
}
}
分享到:
相关推荐
委托可以被视为具有特定签名的多播函数指针,也就是说,它可以同时指向多个方法。这使得一个方法能够调用一组相关的其他方法,这就是委托的多播特性。在事件处理中,委托扮演着关键角色,作为事件和事件处理程序之间...
委托还可以用于实现多播,即一个委托实例可以同时关联多个方法。这在处理事件时非常有用。例如,我们可以添加另一个方法到同一个委托: ```csharp public static void AnotherDisplayMessage(string message) { ...
通过学习这些资料,开发者不仅可以理解EntityFramework中的数据持久化机制,还能掌握委托和多播委托的用法,从而提高代码的可读性和可维护性,同时利用事件驱动编程模式来增强应用程序的功能。在实践中,这样的技能...
本示例是基于VS2015编译环境,主要展示了自定义委托、泛型委托以及多播委托的使用。 **一、自定义委托** 自定义委托允许我们创建符合特定签名的委托类型。首先,我们需要定义一个委托类,它声明了委托可以处理的...
通过这个简单的源码示例,你可以学习如何声明委托、创建委托实例、构建委托链、将委托作为参数传递,以及理解多播委托在事件处理中的应用。这些都是C#中委托的基础,对于进一步探索如Lambda表达式、匿名方法和事件...
在“委托与多线程”这个压缩包中,可能包含了一些示例代码,展示了如何使用C#的委托和多线程特性。这些例子可能包括: 1. **简单的线程启动**:创建一个新的Thread对象并启动,然后在新线程中执行一个由委托引用的...
C#的委托还支持多播,即一个委托实例可以同时绑定多个方法。通过使用`+`运算符,可以将多个方法链接到同一个委托实例,从而实现一次调用执行多个方法的效果。 6. Lambda表达式和匿名方法 在C# 3.0及更高版本中,...
在.NET框架中,委托和事件是两种非常重要的编程概念...在提供的压缩包文件中,`EventDemo_20120228` 和 `DelegateDemo_20120228` 可能包含了具体的示例代码,读者可以通过学习这些代码来进一步加深对委托和事件的理解。
事件是一种特殊的多播委托,它封装了委托的调用细节,是委托的进一步封装。事件是一种用于实现观察者模式(Observer Pattern)的机制,它允许一个类或对象(发布者)向其它一个或多个类或对象(订阅者)通知状态的...
以下是一个简单的多播委托示例: ```csharp public static void AddMethod(MyDelegate del) { del += DisplayMessage; } public static void RemoveMethod(MyDelegate del) { del -= DisplayMessage; } // 调用...
4. **多播委托**:一个委托实例可以绑定多个方法,执行时会依次调用这些方法,实现回调机制。 5. **事件处理**:委托在事件驱动编程中的应用,如何声明、触发和订阅事件。 接下来,我们来看看四个实现委托的小程序...
这个网站经常分享各种编程资源,包括代码示例和学习资料。 "事件委托(万能委托)"这部分标签可能指向了事件处理机制中的委托使用。在.NET中,事件通常通过委托来实现,让一个对象能够通知其他对象当某个特定的事件...
- C#的委托支持多播,即一个委托实例可以关联多个方法。这使得可以同时调用多个方法,非常适合于事件处理。 ```csharp myDel += AnotherMethod; ``` 在这里,`myDel`不仅指向`ShowMessage`,还附加了`...
委托还支持多播,这意味着一个委托实例可以同时关联多个方法。当调用委托时,所有关联的方法都会被依次执行。这种特性在实现广播通知或者执行一系列操作时非常有用。 在C#中,可以使用`+`运算符添加方法到委托实例...
委托还有其他重要的特性,比如多播,即一个委托实例可以关联多个方法。这在处理事件时非常有用,因为一个事件可能有多个订阅者。例如: ```csharp MyDelegate handler1 = new MyDelegate(PrintMessage1); ...
4. **多播委托**: 上述示例展示了委托的多播特性,即一个委托实例可以关联多个方法,执行时按添加顺序调用。 **事件** 1. **定义事件**: 事件通常是私有的,防止外部代码直接触发。事件的定义通常包含在类的私有...
5. 高级主题,如多播委托(一个委托实例可以指向多个方法)和异步事件处理。 PPT演示文稿可能会通过图表和实例更直观地展示这些概念,帮助学习者更好地理解和记忆。 至于提供的代码,可能包含了一些示例,如按钮...
通过学习这些示例,你可以更好地理解如何在实际项目中利用委托来提高代码的可读性和可维护性。 总的来说,委托是C#中一个重要的特性,它使得我们能够以面向对象的方式处理方法,增强了代码的灵活性,特别是在事件...
总的来说,"weituo.zip_委托"中的示例可能演示了如何创建、实例化和使用委托,以及如何将委托与事件相结合来构建灵活的代码结构。学习和理解委托是掌握C#高级特性和设计模式的关键步骤,能够帮助我们编写出更高效、...
这是通过委托的`+=`操作符实现的多播委托功能: ```csharp public static void DoAnotherThing() { Console.WriteLine("Doing another thing..."); } myAction += DoAnotherThing; ``` 现在,当我们调用`...