C#中的委托事件与接口
Posted Z_hongli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的委托事件与接口相关的知识,希望对你有一定的参考价值。
C#中的委托、事件与接口
一、委托
委托:将方法以变量的形式传递,以方法的形式执行
注意:赋值方法的返回类型、参数要与委托的一致(如委托定义的参数类型是string,那么赋值的参数类型也要是string,并且参数个数要一样,委托的定义也是一样)
详细解释:
C#所有的委托派生自 System.Delegate 类,委托是存有对某个方法的引用的一种引用类型变量,委托变量可以当作另一个方法的参数来进行传递,实现事件和回调方法。有点类似C++中的函数指针,但是又有所不同。在C++中,函数指针不是类型安全的,它指向的是内存中的某一个位置,我们无法判断这个指针实际指向什么,对于参数和返回类型难以知晓。而C#的委托则完全不同,它是类型安全的,我们可以清晰的知道委托定义的返回类型和参数类型。
namespace delegation
//定义一个有参数并且无返回值的委托
public delegate void SayHelloDlg(string name);
class Program
static void Main(string[] args)
//委托的声明
SayHelloDlg dlg = SayHello;
//委托的使用
dlg("小朱");
Console.ReadKey();
public static void SayHello(string name)
Console.WriteLine($"name,你好呀!");
运行结果:
(一)委托链
委托链会按照委托注册的顺序依次执行委托
namespace delegation
//定义一个有参数并且无返回值的委托
public delegate void SayHelloDlg(string name);
class Program
static void Main(string[] args)
//委托的声明
SayHelloDlg dlg = SayHello;
//委托链
dlg += SayGoodBye;
//委托的使用
dlg("小朱");
Console.ReadKey();
public static void SayHello(string name)
Console.WriteLine($"name,你好呀!");
public static void SayGoodBye(string name)
Console.WriteLine($"name,再见!");
运行结果:
注意:
Dlg += function 增加注册委托
Dlg -= function 删除注册委托
(二)匿名函数
匿名函数:不用在下面生成一个独立的方法 如果只需要调用一次的话
namespace delegation
//定义一个有参数并且无返回值的委托
public delegate void SayHelloDlg(string name);
class Program
static void Main(string[] args)
//匿名函数 不用在下面生成一个独立的方法 如果只需要调用一次的话
SayHelloDlg dlg1 = delegate (string name)
Console.WriteLine($"name,我是匿名函数!");
;
//委托的使用
dlg1("小朱");
Console.ReadKey();
(三)Lamda语句
相对于匿名函数来说更加的简洁
namespace delegation
//定义一个有参数并且无返回值的委托
public delegate void SayHelloDlg(string name);
class Program
static void Main(string[] args)
//Lamda语句
SayHelloDlg dlg2 = (name) =>
Console.WriteLine($"name,我是Lamda语句!");
;
//委托的使用
dlg2("小朱");
Console.ReadKey();
运行结果:
二、事件
事件:(简单理解)一个被限制了的委托变量
**详解:**委托相当于一系列函数的抽象类,这一系列函数要求拥有相同的参数和返回值;而事件(event)相当于委托的一个实例,事件是委托类型的成员,委托可以定义在类外面,而事件只能定义在类里面。
namespace delegation
//定义一个有参数并且无返回值的委托
public delegate void SayHelloDlg(string name);
class Program
//声明事件
public static event SayHelloDlg SayHelloEvent;
static void Main(string[] args)
SayHelloEvent += Progame_SayHelloEvent;
if (SayHelloEvent != null)
SayHelloEvent("小朱");
Console.ReadKey();
public static void Progame_SayHelloEvent(string name)
Console.WriteLine($"name,我是一个事件!");
三、接口
接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。
接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。
以上是关于C#中的委托事件与接口的主要内容,如果未能解决你的问题,请参考以下文章