我理解的委托的作用是:一个对象中发生的事件,要在另一个对象中调用方法,这就需要一种技术在两个不同的对象之间进行信息传输,这就是委托的作用。一般来说,我们将产生事件的对象称为发布者,将处理事件的类称为订阅者。
接下来用一个简单的例子进行说明,这个例子中有两个不同的类BankCard(发布者)和Phone(倾听者),希望实现的作用是Card里每消费一笔钱(发生事件),Phone里就会显示出花了多少钱(方法),由于事件发生和处理方法分别是在两个不同的对象中,因此需要一个委托将其 联系起来。
首先在Phone类里写出要处理事件的方法,在这里我们只需要显示花了多少钱
public class Phone
{
public void Show(int money)
{
Console.WriteLine("本次消费{0}元!", money);
}
}然后我们在命名空间中定义委托,委托跟方法的定义非常类似,只是增加了delagate关键词,减少了具体实现的代码块
public delegate void CostMoney(int money); 注意委托和上面方法的参数类型和返回类型要保持一致。 第三步要在BankCard类中声明事件
public class BankCard
{
private int money;//消费的钱
public int Money
{
get { return money; }
set { money = value; }
}
public event CostMoney SpendMoney; //声明事件
}具体来说是以下这句
public event CostMoney SpendMoney; //声明事件该语句声明了一个名为SpendMoney的事件,每当发生该事件后,应该产生一个CostMoney委托
第四步我们应该在BankCard类里写出一个抛出事件的方法。在类里添加下面代码
//抛出事件
public void Spend(int money)
{
Console.WriteLine("欢迎您购物!");
if (SpendMoney != null)
{
SpendMoney(money); //每次使用一个Spend函数都会抛出一次事件
}
} 第五步,在主程序中建立事件与委托之间的联系。在主函数中添加下面代码 //声明两个对象,因为事件和委托是发生在两个不同的对象之间,因此不能使用静态类
BankCard myCard = new BankCard();
Phone myPhone = new Phone();
//建立事件和委托之间的联系
myCard.SpendMoney += myPhone.Show;
//调用方法产生事件
myCard.Spend(20);
Console.ReadKey(); 具体讲讲myCard.SpendMoney += myPhone.Show;代码左边是事件,右边是发生事件后执行的方法,注意这里的方法名后面没有小括号()
代码执行效果

完整的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Try
{
public delegate void CostMoney(int money);
public class BankCard
{
private int money;//消费的钱
public int Money
{
get { return money; }
set { money = value; }
}
public event CostMoney SpendMoney; //声明事件
//调用事件
public void Spend(int money)
{
Console.WriteLine("欢迎您购物!");
if (SpendMoney != null)
{
SpendMoney(money); //每次使用一个Spend函数都会产生一次事件
}
}
}
public class Phone
{
public void Show(int money)
{
Console.WriteLine("本次消费{0}元!", money);
}
}
class Program
{
static void Main(string[] args)
{
//声明两个对象,因为事件和委托是发生在两个不同的对象之间,因此不能使用静态类
BankCard myCard = new BankCard();
Phone myPhone = new Phone();
//建立事件和委托之间的联系
myCard.SpendMoney += myPhone.Show;
//调用方法产生事件
myCard.Spend(20);
Console.ReadKey();
}
}
}
博客参考:https://blog.youkuaiyun.com/xu_jin_shan/article/details/78066700
本文通过一个具体的例子详细介绍了委托机制在C#中的应用。利用BankCard类和Phone类演示了如何在一个对象中触发事件,并在另一个对象中响应这些事件。文章还深入解释了委托的定义、事件的声明以及事件处理函数的连接过程。

被折叠的 条评论
为什么被折叠?



