c#委托详解

这篇具有很好参考价值的文章主要介绍了c#委托详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

委托是一种能够将方法作为参数传递、存储方法并且调用方法的类型,它可以让我们写出更加灵活和可扩展的代码。委托通常用于回调 (Callback) 机制,比如在事件处理、异步编程、LINQ 查询等场景中常常会使用委托。它可以将方法作为参数传递给其他方法,从而在需要的时候执行该方法。

代码演示

hello world

快速用委托写一个hello world,定义了一个名为 DelegateMethod 的委托类型,它有一个无参数的 Invoke 方法。然后在 Main 方法中,我们创建了一个名为 delegateMethod 的委托实例,并调用它的 Invoke 方法。这样就可以通过委托来调用其他方法,并在调用时传递参数。

public delegate void DelegateMethod();

public static void Main(string[] args)  
{
    DelegateMethod delegateMethod = new DelegateMethod();  
    delegateMethod();  
}

static void DelegateMethod()  
{
    Console.WriteLine("Hello, world!");  
}

 委托多播

    public delegate void Teacher();

    void Language()
    {
        Console.WriteLine("我是语文课代表");
    }

    void English()
    {
        Console.WriteLine("我是英语课代表");
    }


    public static void Main(string[] args)  
    {
        Teacher teacher = new Teacher(Language);
        teacher += English;
        teacher.Invoke();
    }

 匿名方法

延用上面的Teacher方法

    public static void Main(string[] args)  
    {
        Teacher teacher = delegate
        {
            Console.WriteLine("使用匿名方法");
        };
        teacher.Invoke();
    }

c#委托详解

lambda表达式

    public static void Main(string[] args)  
    {
    // Teacher teacher = (如果有参数,把参数写在括号内) =>
        Teacher teacher = () =>
        {
            Console.WriteLine("使用匿名方法");
        };
        teacher.Invoke();
    }

 内置委托Action

内置委托Action是一种匿名委托类型,它可以接收一个参数并在执行时传递该参数。它通常用于执行简短的操作,例如打开一个文件或发送一条消息,等等。

Action 是一个内置类型,它定义了一个无返回值的委托类型,它可以接受一个参数。该委托类型的参数可以是任何类型,包括基本数据类型、引用类型和自定义类型。

        Action action = () => { Console.WriteLine("一个无参无返回值的委托"); };
        action.Invoke();

c#委托详解

 文章来源地址https://www.toymoban.com/news/detail-403049.html

Action<int> actionInt = (i) => { Console.WriteLine($"带参数内置委托,参数为{i}"); };
actionInt.Invoke(123);

c#委托详解

 内置委托Func

func是C#6.0中引入的一种新的函数类型,而上面的Action是C#内置的匿名委托类型。

并且Func与Action的返回值不同,Action 类型必须返回 void,func类型的返回值可以是任何类型

如下:

// 定义一个返回字符串的 func 类型函数 
func<string>(int x) => x.ToString();  
// 定义一个返回布尔值的 func 类型函数  
func<bool>(int x) => x > 0; 
// 定义一个返回自定义类型的 func 类型函数 
func<MyType>(int x) => new MyType { Value = x };   

要注意的是,如果定义的 func 类型函数返回值为自定义类型,则该自定义类型必须实现 IConvertible 接口。

演示:

        //无参有返回值
        Func<int> func = () => { return 10; };
        int f = func.Invoke();
        Console.WriteLine(f);
        
        //有参有返回值
        Func<int, int, string> funcMax = (x, y) => (x + y).ToString();
        Console.WriteLine(funcMax.Invoke(2,3));

c#委托详解

事件

事件是一个特殊类型的委托,它包含了一个事件处理程序列表。事件处理程序在事件发生时被调用,可以在事件处理程序中处理事件和事件数据。

委托和事件实际上是相互关联的。事件本身就是一个委托,它包含了一个事件处理程序列表。当事件触发时,事件处理程序列表中的处理程序会被调用。每个事件处理程序都是一个委托,它实现了事件处理的逻辑。


    //事件是一个委托,并且是一个特殊的密封类
    public event Action Event1;

    [Test]
    public void TsetEvent()
    {
        //只能通过+=和-=来订阅与取消订阅方法
        Event1 += () => { Console.WriteLine("触发事件1"); };
        Event1 += () => { Console.WriteLine("触发事件2"); };
        Event1 += () => { Console.WriteLine("触发事件3"); };
        
        Event1.Invoke();
    }

 

 

到了这里,关于c#委托详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#中的委托(Delegate)和事件 (Event)详解与使用范例

    最近天气晴雨不定,你因为害怕打游戏时忘记在下雨时收衣服或者在天晴时把衣服挂出去,于是你委托好友小明在天气发生变化时打电话通知你,这就是一种委托. 下面是这种委托的实例代码 以上代码的输出为 值得一提的是,如下代码为创建一个继承自Delegate类的名为XiaoMing的子类

    2023年04月12日
    浏览(42)
  • C#:单例,闭包,委托与事件,线程,Parallel,Params,扩展方法,接口与抽象类

    在对泛型的约束中,最常使用的有where 和 new。 其中where是约束所使用的泛型,该泛型必须是where后面的类,或者继承自该类。 new()说明所使用的泛型,必须具有无参构造函数,这是为了能够正确的初始化对象 1.泛型约束class Singleton where T : class,new() 2.静态对象没创

    2024年01月16日
    浏览(90)
  • clDice-一种新的分割标准-能够促进管状结构分割的连接性

    clDice-a Novel Topology-Preserving Loss Function for Tubular StructureSegmentation论文总结 论文:clDice-A Novel Topology-Preserving Loss Function for Tubular Structure 源码:GitHub - jocpae/clDice 目录 一、论文背景和出发点 二、创新点 三、clDice指标 四、clDice的拓扑保证 五、使用clDice训练神经网络 六、Cost函数

    2024年02月09日
    浏览(52)
  • 【C#学习笔记】委托与事件 (从观察者模式看C#的委托与事件)

    转载请注明出处:🔗https://blog.csdn.net/weixin_44013533/article/details/134655722 作者:CSDN@|Ringleader| 主要参考: 委托(C# 编程指南) 事件介绍 C# 中的委托和事件简介 Delegate 类 Exploring the Observer Design Pattern微软技术文章翻译 委托是一种 引用类型 ,表示对具有特定参数列表和返回类型

    2024年02月04日
    浏览(50)
  • AI:153-开发一种能够自动化生成电影剧本的人工智能系统

    本文收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正在不断更新中~ 人工智能(AI)的发展已经

    2024年03月27日
    浏览(67)
  • C#之委托

    目录 一、简介 (一)概述 (二)类与委托 二、声明委托 三、使用委托 (一)创建委托对象 (二)使用委托 四、简单的委托示例 五、Action[T]和Func[T]委托 六、多播委托 七、匿名方法         委托时寻址方法的.NET版本。在C++中,函数指针只不过是一个指向内存位置的指

    2024年01月18日
    浏览(37)
  • C#基础--委托

    C#基础–委托 简单说它就是一个能把方法当参数传递的对象,而且还知道怎么调用这个方法,同时也是粒度更小的“接口”(约束了指向方法的签名) 跟方法有点类似,有参数,返回值,访问修饰符+ delegate 委托的本质是一个类,继承自一个特殊类 MulticastDelegate ,我们自己在

    2024年02月16日
    浏览(43)
  • C# 常量 结构体 委托

    常量名命名一般使用大写字母 开发一个游戏,游戏角色有法师(Mage)、射手(Archer)、刺客(Assassin)、坦克(Tank)、铺助(Support)、战士(Warrior),等不同类型。 ❓如何存储游戏角色 使用 int 类型 :创建一套规则,提前为各个类型角色绑定一个数字标识 使用枚举类型 什么是枚举类型?

    2024年02月02日
    浏览(33)
  • C#——委托

    什么是委托        C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。 声明委托          委托声明决定了可由该委托引用的方法。委托可指向一个与其具有相同标签的方法。  

    2023年04月15日
    浏览(29)
  • C#编程-实现委托

    委托是可以存储对方法的引用的对象。在C#中,委托允许您动态地改变类中方法的引用。 考虑咖啡售货机的示例,它配置不同口味的咖啡,例如卡布奇诺咖啡和黑咖啡。在选择所需口味的咖啡时,售货机决定混合各种成分,例如奶粉、咖啡粉、热水、卡布奇诺咖啡粉。所有的

    2024年02月02日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包