1 //delegate类型是C#语言另一个创新的技巧,它是一种数据结构,提供类似C++中函数指针(Function Pointer)的功能
2 //delegate类型是面向对象函数指针(Object-Oriented Function Pointer).不过,不同的是C++的函数指针只能够指向静
3 //态的方法,而delegate除了可以指向静态的方法之外,还可以指向对象实体的方法.而最大的差别在于delegate是完全面向
4 //对象、具类型安全性、且使用安全的类型。另外,delegate可以在执行时期传入方法的名称,动态地决定欲调用的方法。
5
6 //语法介绍:
7 //[attributes] [modifiers] delegate result-type identifier ([formal-parameters]);
8 //其中:
9
10 //attributes(可选)
11 //附加的声明性信息。有关属性和属性类的更多信息,请参见 17. 属性。
12 //modifiers(可选)
13 //允许使用的修饰符有 new 和四个访问修饰符。
14 //result-type
15 //同方法的返回类型匹配的结果类型。
16 //identifier
17 //委托名称。
18 //formal-parameters(可选)
19 //参数列表。如果参数是一个指针,则必须用 unsafe 修饰符声明委托。
20
21 //1.声明delegate类型
22 //2.定义欲调用的方法
23 //3.定义delegate类型处理函数,使用delegate
24 //4.建立delegate类型实体,传入欲调用的方法名称
25 //5.将程序代码连接起来
26
27 //接下来通过实例来演示怎么使用delegate
28 using System;
29
30 namespace ConsoleApplication1
31 {
32 // 1.定义delegate类型:FunctionPointer
33 public delegate string FunctionPointer(string Name);
34
35 public class Text
36 {
37 // 2.定义欲调用方法:F1 和 F2
38 public static string F1(string Name)
39 {
40 return "A Say:My name is " + Name;
41 }
42 public static string F2(string Name)
43 {
44 return "B Say:My name is " + Name + " too";
45 }
46 // 3.定义delegate类型处理函数:PrintMethod
47 public static void PrintMethod(FunctionPointer tempF)
48 {
49 Console.Write(tempF("CIPC"));
50 }
51 public static void Main()
52 {
53 // 4.建立delegate类型实体:a 和 b ,传入欲调用的方法名称
54 FunctionPointer a = new FunctionPointer(F1);
55 FunctionPointer b = new FunctionPointer(F2);
56 // 5.将程序代码连接起来
57 PrintMethod(a);
58 PrintMethod(b);
59
60 }
61 }
62 }
63
64 // 首先定义一个实体 a 以后,调用处理函数:PrintMethod(a) ,此时 tempF 指向方法:F1 并将 tempF("CIPC") 中的string类型
65 // "CIPC"传递给 F1 的参数 Name , 执行完 F1 方法后,返回“A Say:My name is CIPC"给PrintMethod并执行,打印
2 //delegate类型是面向对象函数指针(Object-Oriented Function Pointer).不过,不同的是C++的函数指针只能够指向静
3 //态的方法,而delegate除了可以指向静态的方法之外,还可以指向对象实体的方法.而最大的差别在于delegate是完全面向
4 //对象、具类型安全性、且使用安全的类型。另外,delegate可以在执行时期传入方法的名称,动态地决定欲调用的方法。
5
6 //语法介绍:
7 //[attributes] [modifiers] delegate result-type identifier ([formal-parameters]);
8 //其中:
9
10 //attributes(可选)
11 //附加的声明性信息。有关属性和属性类的更多信息,请参见 17. 属性。
12 //modifiers(可选)
13 //允许使用的修饰符有 new 和四个访问修饰符。
14 //result-type
15 //同方法的返回类型匹配的结果类型。
16 //identifier
17 //委托名称。
18 //formal-parameters(可选)
19 //参数列表。如果参数是一个指针,则必须用 unsafe 修饰符声明委托。
20
21 //1.声明delegate类型
22 //2.定义欲调用的方法
23 //3.定义delegate类型处理函数,使用delegate
24 //4.建立delegate类型实体,传入欲调用的方法名称
25 //5.将程序代码连接起来
26
27 //接下来通过实例来演示怎么使用delegate
28 using System;
29
30 namespace ConsoleApplication1
31 {
32 // 1.定义delegate类型:FunctionPointer
33 public delegate string FunctionPointer(string Name);
34
35 public class Text
36 {
37 // 2.定义欲调用方法:F1 和 F2
38 public static string F1(string Name)
39 {
40 return "A Say:My name is " + Name;
41 }
42 public static string F2(string Name)
43 {
44 return "B Say:My name is " + Name + " too";
45 }
46 // 3.定义delegate类型处理函数:PrintMethod
47 public static void PrintMethod(FunctionPointer tempF)
48 {
49 Console.Write(tempF("CIPC"));
50 }
51 public static void Main()
52 {
53 // 4.建立delegate类型实体:a 和 b ,传入欲调用的方法名称
54 FunctionPointer a = new FunctionPointer(F1);
55 FunctionPointer b = new FunctionPointer(F2);
56 // 5.将程序代码连接起来
57 PrintMethod(a);
58 PrintMethod(b);
59
60 }
61 }
62 }
63
64 // 首先定义一个实体 a 以后,调用处理函数:PrintMethod(a) ,此时 tempF 指向方法:F1 并将 tempF("CIPC") 中的string类型
65 // "CIPC"传递给 F1 的参数 Name , 执行完 F1 方法后,返回“A Say:My name is CIPC"给PrintMethod并执行,打印