委托(C#)
今天是实习的第二天,这几天学的都是C#的基础知识,由于上学期我在学校学过(实习生来自多个高校,有的同学没学过),我上课没怎么听,感觉没什么压力,老师讲的东西太简单,来之前,对这次的实训期望好高,想学一学.NET的一些高级应用,有点失望.....
不管怎么样,虽然是讲我学过的东西,但有些知识点还是不太理解,接下来我会写学习过程中的一重点知识点,作为笔记吧~!
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值,如下面的示例所示:
public delegate int PerformCalculation(int x, int y);
与委托的签名(由返回类型和参数组成)匹配的任何方法都可以分配给该委托。这样就可以通过编程方式来更改方法调用,还可以向现有类中插入新代码。只要知道委托的签名,便可以分配自己的委托方法。
将方法作为参数进行引用的能力使委托成为定义回调方法的理想选择。例如,可以向排序算法传递对比较两个对象的方法的引用。分离比较代码使得可以采用更通用的方式编写算法。
委托概述
委托具有以下特点:
委托类似于 C++ 函数指针,但它是类型安全的。
-
委托允许将方法作为参数进行传递。
-
委托可用于定义回调方法。
-
委托可以链接在一起;例如,可以对一个事件调用多个方法。
-
方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变。
-
C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。
-
//定义委托和方法
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
5
namespace ConsoleApplication1
6
{
7
class Class4
8
{
9
public delegate void Calc(double x, double y);
10
public void CalcAdd(double x, double y)
11
{
12
Console.WriteLine("x+y={0}", x + y);
13
}
14
public void CalcSub(double x, double y)
15
{
16
Console.WriteLine("x-y={0}", x - y);
17
}
18
public void CalcMul(double x, double y)
19
{
20
Console.WriteLine("x*y={0}", x * y);
21
}
22
public void CalcDiv(double x, double y)
23
{
24
Console.WriteLine("x/y={0}", x / y);
25
}
26
}
27
}
28
//测试主类
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
5
namespace ConsoleApplication1
6
{
7
class Program
8
{
9
static void Main(string[] args)
10
{
11
Class4 c4 = new Class4();
12
Class4.Calc clac;
13
clac = c4.CalcAdd;
14
clac += c4.CalcSub;
15
clac += c4.CalcMul;
16
clac += c4.CalcDiv;
17
clac(45, 67);
18
}
19
20
}
21
}
22
23
结果..... 


浙公网安备 33010602011771号