前言
似乎委托对于C#而言是一种高级属性,但是我依旧希望你就算第一次看我的文章,也能有很大的收获。
所以本博客的语言描述尽量简单易懂,知识点也是面向初入门对于委托不了解的学习者的。当然如果有幸有大佬发现文章的错误点,也欢迎留言指出!
关于委托
关于委托的介绍主要来源于C#文档:委托概述(本文章优势在于去掉一些不必要的细节,对于初学者而言简单高效)
委托的定义主要是下面几个方面:
- 委托是一种引用类型:表示对具有特定参数列表和返回类型的方法的引用
- 在实例化委托时,你可以将其实例与任何具有兼容签名和返回类型的方法相关联。 你可以通过委托实例调用方法
委托本质上来讲就是将方法作为参数传递给其他方法的一种实现方式,当然开发者也可以直接去调用方法。但是当一个项目扩展到足够大时,这种直接调用的方式就会很复杂,难以维护。而委托不会,可以很方便的进行后期的扩展开发。只需要将自己的方法传入已经写好的对应的委托即可。而不需要再在大量的代码中找到调用处写入自己的方法。
关于委托的一些特点是(暂时不了解没有关系):
- 委托类似于 C++ 函数指针,但委托完全面向对象,不像 C++ 指针会记住函数,委托会同时封装对象实例和方法。
- 委托允许将方法作为参数进行传递。
- 委托可用于定义回调方法。
- 委托可以链接在一起;例如,可以对一个事件调用多个方法。
- 方法不必与委托类型完全匹配。 有关详细信息,请参阅使用委托中的变体。
- 使用
Lambda
表达式可以更简练地编写内联代码块。Lambda
表达式(在某些上下文中)可编译为委托类型。 若要详细了解lambda
表达式,请参阅 lambda 表达式。
如果对于一个初学者,你可以简单的理解,委托就是一个更高级的调用方法的方式,而你要学习的,就是这种方式的实现方法,然后后期再慢慢理解更多的细节。
委托的实现
一、基本实现方式
前面也说,委托是一个引用类型,要使用委托,肯定就需要对其进行定义并创建一个委托对象,下面使用一个带有一个参数的案例来理解委托
public class DemoDelegate
{
//T1:
delegate void TestDel(string s);
TestDel Del;
//T4:
static void Main(string[] args)
{
DemoDelegate demo = new DemoDelegate();
demo.CreateDelObject();
demo.Del?.Invoke("你们好");
}
//T3:
public void CreateDelObject()
{
Del += TestEventOne;
Del += TestEventTwo;
}
//T2:
public void TestEventOne(string str)