您的位置:首页 > 编程语言 > C#

C#委托

2020-07-21 17:01 651 查看

委托

定义与应用场景

委托是一种类,定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。特别用于实现事件和回调方法,所有委托都派生自System.Delegate类。

声明委托

与类的定义相似,委托的定义语法如下:

修饰符  delegate  返回值类型  委托名 ( 参数列表 );
public delegate void MyDelegate();

实例化委托

实例化委托步骤如下:

委托名  委托对象名 = new 委托名 ( 方法名 );//方法名既可以是静态方法名
//也可以是实例方法名,注意方法名必须与定义时返回值类型和参数列表相同
MyDelegate myDelegate = new MyDelegate(Test.SayHello);

实例化后调用形式如下:

委托对象名(参数列表);

代码例子

class Program
{
public delegate void MyDelegate();
static void Main(string[] args)
{
MyDelegate myDelegate = new MyDelegate(new Test().SayHello);
myDelegate();
}
}
class Test
{
public void SayHello()
{
Console.WriteLine("Hello Delegate!");
}
}

多播委托

指在一个委托中注册多个方法,注册方法时在委托中使用+或者-实现添加或撤销方法。

class Program
{
//定义购买商品委托
public delegate void OrderDelegate();
static void Main(string[] args)
{
//实例化委托
OrderDelegate orderDelegate = new OrderDelegate(Order.BuyFood);
//向委托中注册方法
orderDelegate += Order.BuyCake;
orderDelegate += Order.BuyFlower;
//调用委托
orderDelegate();
}
}
class Order
{
public static void BuyFood()
{
Console.WriteLine("购买快餐!");
}
public static void BuyCake()
{
Console.WriteLine("购买蛋糕!");
}
public static void BuyFlower()
{
Console.WriteLine("购买鲜花!");
}
}

撤销购买鲜花:

orderDelegate -= Order.BuyFlower;

匿名委托

使用匿名方法注册在委托上,在委托中通过定义代码块实现委托的作用,语法如下:

//定义委托
修饰符  delegate  返回值类型  委托名 ( 参数列表 );
//定义匿名委托
委托名  委托对象 = delegate
{
//代码块
};//<-------注意分号
//调用委托
委托对象名 ( 参数列表 );

使用匿名委托计算长方形面积

class Program
{
public delegate void AreaDelegate(double length, double width);
static void Main(string[] args)
{
Console.WriteLine("请输入长方形的长:");
double length = double.Parse(Console.ReadLine());
Console.WriteLine("请输入长方形的宽:");
double width = double.Parse(Console.ReadLine());
AreaDelegate areaDelegate = delegate
{
Console.WriteLine("长方形的面积为:" + length * width);
};
areaDelegate(length, width);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: