计算机网站的开发流程,搜索引擎有哪些平台,广州互联网公司有哪些,手机如何做api网站C# 委托和事件 委托匿名方法事件 委托
当要把方法传送给其他方法时#xff0c;需要使用委托。首先定义要使用的委托#xff0c;对于委托#xff0c;定义它就是告诉编译器这种类型的委托代表了哪种类型的方法#xff0c;然后创建该委托的一个或多个实例。编译器在后台将创建… C# 委托和事件 委托匿名方法事件 委托
当要把方法传送给其他方法时需要使用委托。首先定义要使用的委托对于委托定义它就是告诉编译器这种类型的委托代表了哪种类型的方法然后创建该委托的一个或多个实例。编译器在后台将创建表示该委托的一个类。其语法类似于方法的定义但没有方法体定义的前面要加上关键字 delegate。因为定义委托基本上是定义一个新类所以可以在定义类的任何地方定义委托既可以在另一个类的内部定义也可以在任何类的外部定义还可以在命名空间中把委托定义为顶层对象。 定义委托的语法如下 delegate void IntMMethodInvoker(int x); 假定要定义一个委托 TwoLongsOp该委托代表的方法有两个 long 型参数返回类型为 double。可以编写如下代码 delegate double TwoLongsOp(long first, long second); 定义一个委托它代表的方法不带参数返回一个 string 型的值则可以编写如下代码 delegate string GetAString(); 根据定义的可见性可以在委托定义上添加一般的访问修饰符public、private、protected 等 public delegate string GetAString(); 简单的委托示例
class MathsOperations
{public static double MultiplyByTwo(double value){return value * 2;}public static double Square(double value){return value*value;}
}下面调用这些方法
using System;
namespace Wrox.ProCSharp.Delegates
{delegate double DoubleOp(double x);class Program{static void Main(){DoubleOp[] operations {MathsOperations.MultiplyByTwo,MathsOperations.Square,};for (int i0; ioperations.Length; i){Console.WriteLine(Using operations[{0}]:, i);ProcessAndDisplayNumber(operations[i], 2.0);ProcessAndDisplayNumber(operations[i], 7.94);ProcessAndDisplayNumber(operations[i], 1.414);Console.WriteLine();}}static void ProcessAndDisplayNumber(DoubleOp action, double value){double result action(value);Console.WriteLine(Value is {0}, result of operation is {1}, value, result);}}
}多播委托
delegate void DoubleOp(double value); // 定义委托
DoubleOp opt1 MathOperations.MultiplyByTwo; // 委托1
DoubleOp opt2 MathOperations.Square; // 委托2
DoubleOp operations operation1 operation2; // 委托增加operations(2.0); // 委托1委托2的方法都会调用多播委托还识别运算符-和-以从委托中删除方法调用。
匿名方法
用匿名方法定义委托的语法与前面的定义并没有区别。但在实例化委托时就有区别了。下面是 一个非常简单的控制台应用程序说明了如何使用匿名方法
using System;
namespace Wrox.ProCSharp.Delegates
{class Program{delegate string DelegateTest(string val);static void Main(){string mid , middle part,;DelegateTest anonDel delegate(string param) // 匿名方法{param mid;param and this was added to the string.;return param;};Console.WriteLine(anonDel(Start of string));}}
}事件
基于 Windows 的应用程序也是基于消息的。这说明应用程序是通过 Windows 来通信的Windows又是使用预定义的消息与应用程序通信的。这些消息是包含各种信息的结构应用程序和 Windows使用这些信息决定下一步的操作。在 MFC 等库或 Visual Basic 等开发环境推出之前开发人员必须处理 Windows 发送给应用程序的消息。Visual Basic 和今天的.NET 把这些传送来的消息封装在事件中。如果需要响应某个消息就应处理对应的事件。一个常见的例子是用户单击了窗体中的按钮后Windows 就会给按钮消息处理程序(有时称为 Windows 过程或 WndProc)发送一个 WM_MOUSECLICK消息。对于.NET 开发人员来说这就是按钮的 Click 事件。