- 委托和事件的概念说明:
- 委托是一种类型,代表可以指向具有特定参数列表和返回类型的方法的引用,可以使方法的参数自由变化,可以做到比直接调用方法更灵活。
-
事件是一种特殊的委托,被用于实现发布者/订阅者模式,通过事件的注册和触发可以完成对象间的通信。
-
委托的声明和使用:
- 声明委托的语法:delegate returnType DelegateName(parameters);
- 委托可以使用+=运算符合并多个方法,使用-=运算符移除指定的方法。
- 示例1:通过委托实现简单的计算器程序
using System;
namespace DelegateDemo
{
delegate int Calculate(int x, int y);
class Program
{
static void Main(string[] args)
{
Calculate add = Add; // 实例化委托对象,指向Add方法
Calculate sub = Sub; // 实例化委托对象,指向Sub方法
Calculate cal = add + sub; // 使用+=运算符合并委托
Console.WriteLine("10 + 5 = " + cal(10, 5)); // 输出 "10 + 5 = 15"
Console.WriteLine("10 - 5 = " + sub(10, 5)); // 输出 "10 - 5 = 5"
}
static int Add(int x, int y) // 实现加法的方法
{
return x + y;
}
static int Sub(int x, int y) // 实现减法的方法
{
return x - y;
}
}
}
- 事件的声明和使用:
- 声明事件的语法:[access modifier] event [delegate type] EventName;
- 发布者通过使用事件来注册和触发方法,订阅者通过事件处理程序来处理。
- 示例2:通过事件实现简单的铃声提醒程序
using System;
namespace EventDemo
{
delegate void RingEventHandler();
class DoorBell
{
public event RingEventHandler Ring; // 声明事件
public void Press() // 门铃被按时触发事件
{
Console.WriteLine("门铃响了");
if (Ring != null)
{
Ring();
}
}
}
class Person
{
public void Answer()
{
Console.WriteLine("你好,我是XXX,请问您找谁?");
}
}
class Program
{
static void Main(string[] args)
{
DoorBell doorBell = new DoorBell();
Person person = new Person();
doorBell.Ring += new RingEventHandler(person.Answer); // 注册事件处理程序
doorBell.Press(); // 模拟按下门铃按钮
}
}
}
以上是委托和事件的基本概念和使用方法,只是一个简单的入门例子。在实际应用中,委托和事件可以实现非常强大的功能,如ASP.NET中的事件驱动编程、Unity3D中的消息机制等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中的委托和事件 - Python技术站