c#编程之委托、事件与线程

委托(delegate)

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

在C#中使用delegate关键字定义委托,然后使用我们熟悉的函数调用的语法来调用委托。

public delegate void DeleteDetailHandler(int resultValue);

当我们用delegate关键字声明委托时,编译器自动为我们生成。类的名字即为委托变量名访问类型为定义的委托访问类型。如上例中,定义的委托对应的类为DeleteDetailHandler访问类型为public,该类继承自[mscorlib]System.MulticastDelegate。如果我们定义委托的访问类型为private或者protected,则对应的委托类的访问类型为private或者protected。但是任何委托都继承自[mscorlib]System.MulticastDelegate。

事件(event)

微软的定义:和委托类似,事件是后期绑定机制。 实际上,事件是建立在对委托的语言支持之上的。事件基于委托,为委托提供了一种发布/订阅机制。

在类的内部声明事件,首先必须声明该事件的委托类型(这里我们直接使用上个例子中定义的委托类型DeleteDetailHandler)。然后,声明事件本身,使用 event 关键字,例如:

public event DeleteDetailHandler OnDeleteDetail;

从事件的声明,我们可以大致看出事件与委托的关系:

  1. 事件是委托的特殊实现,事件是建立在对委托的语言支持之上的。
  2. 委托是一种类型,事件是委托类型的一个实例,加上了event的权限控制,限制权限,只允许在事件声明类里面去invoke和赋值,不允许外面,甚至子类调用。

线程(Thread)

但是很多时候,在新的线程中,我们需要与UI(Windows窗体设计器用户界面)进行交互,在C#中不允许直接这样做。
Windows窗体中的控件被绑定到特定的线程,不具备线程安全性。因此,如果从另一个线程调用控件的方

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中的线程委托是两个重要的概念,它们在多线程编程中起到了重要的作用。 线程是操作系统中独立的执行单元,它可以执行一个或多个方法,并且可以并发地运行。在 C# 中,可以使用 Thread 类来创建和管理线程。Thread 类提供了许多方法和属性,例如 Start 方法用于启动线程,Join 方法用于等待线程执行完成,IsAlive 属性用于判断线程是否处于活动状态等等。 委托C# 中的一个重要的概念,它可以用来封装一个或多个方法,并且可以作为参数传递给其他方法。委托可以用来实现事件和回调函数等功能。在 C# 中,使用 delegate 关键字来定义委托类型,例如: ``` public delegate void MyDelegate(int x, int y); ``` 上面的代码定义了一个名为 MyDelegate 的委托类型,它可以接受两个整数参数并且不返回任何值。可以使用委托类型来封装一个方法,例如: ``` public void MyMethod(int x, int y) { Console.WriteLine(x + y); } MyDelegate del = new MyDelegate(MyMethod); ``` 上面的代码将 MyMethod 方法封装到一个名为 del 的委托实例中。可以使用 del.Invoke() 方法来调用委托实例中封装的方法。 在多线程编程中,可以使用委托来实现在线程中执行方法的功能,例如: ``` public void MyThreadMethod(MyDelegate del) { del.Invoke(1, 2); } MyDelegate del = new MyDelegate(MyMethod); Thread thread = new Thread(() => MyThreadMethod(del)); thread.Start(); ``` 上面的代码创建了一个新的线程,并且在线程中执行了 MyThreadMethod 方法。MyThreadMethod 方法接受一个 MyDelegate 委托类型的参数,并且调用了该委托实例中封装的方法。在上面的代码中,将 MyMethod 方法封装到了 del 委托实例中,并且将该委托实例作为参数传递给了 MyThreadMethod 方法。因此,在新的线程中,将会执行 MyMethod 方法,并且输出 3。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值