C#中的委托和事件

  1. 委托和事件的概念说明:
  2. 委托是一种类型,代表可以指向具有特定参数列表和返回类型的方法的引用,可以使方法的参数自由变化,可以做到比直接调用方法更灵活。
  3. 事件是一种特殊的委托,被用于实现发布者/订阅者模式,通过事件的注册和触发可以完成对象间的通信。

  4. 委托的声明和使用:

  5. 声明委托的语法:delegate returnType DelegateName(parameters);
  6. 委托可以使用+=运算符合并多个方法,使用-=运算符移除指定的方法。
  7. 示例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;
        }
    }
}
  1. 事件的声明和使用:
  2. 声明事件的语法:[access modifier] event [delegate type] EventName;
  3. 发布者通过使用事件来注册和触发方法,订阅者通过事件处理程序来处理。
  4. 示例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技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • C# IQueryable及IEnumerable区别解析

    接下来我将为您详细讲解“C# IQueryable及IEnumerable区别解析”的完整攻略。 C# IQueryable及IEnumerable的区别 IQueryable IQueryable是一个接口,它继承自IEnumerable接口。IQueryable接口是用来查询数据源的,它提供了非常方便的方法来过滤、排序、聚合数据源。IQueryable下…

    C# 2023年6月1日
    00
  • c# 字符串操作总结

    C#字符串操作总结 在C#中,字符串是一种常用的数据类型。C#提供了许多内置方法和库函数来操作和处理字符串。本篇攻略将介绍C#的常见字符串操作和用法总结。 字符串的定义 在C#中,字符串是用引号(单引号或双引号)括起来的一系列字符。例如: string str1 = "hello"; string str2 = "world&q…

    C# 2023年5月15日
    00
  • C# Add(T):将元素添加到 ICollection

    C#中的Add(T)方法主要是用来向List集合中添加元素的,T代表数据类型,可以是整型、浮点型、字符串、对象等等。本文将详细讲解C# Add(T)方法的使用方法和注意点。 语法 以下是Add(T)方法的基本语法: public void Add(T item); 参数 Add(T)方法的参数是要添加到List集合中的元素。 返回值 Add(T)方法没有返回…

    C# 2023年4月19日
    00
  • ASP.NET Core应用错误处理之ExceptionHandlerMiddleware中间件呈现“定制化错误页面”

    ASP.NET Core应用错误处理之ExceptionHandlerMiddleware中间件呈现“定制化错误页面” 在ASP.NET Core应用程序中,错误处理是一个非常重要的方面。当应用程序出现错误时,我们需要能够捕获并处理这些错误,以便向用户提供有用的信息。在本攻略中,我们将深入讲解如何使用ExceptionHandlerMiddleware中间件…

    C# 2023年5月17日
    00
  • 关于C#中yield return用法的思考

    关于C#中yield return用法的完整攻略如下: 1. 什么是yield return yield return 是C#中的迭代器语法。简单来说,它允许我们一次性返回一组值的序列,而不需要在内存中维护它们的列表。 C# 的 yield 关键字使得我们可以定义一种流式处理的方式。被yield 关键字所标记的方法返回一个IEnumerable 接口对象,使…

    C# 2023年6月6日
    00
  • C#实现根据银行卡卡号判断银行名

    C#实现根据银行卡卡号判断银行名的方法可以分为以下几个步骤: 步骤一:了解银行卡卡号规则 在判断银行名之前,我们需要了解银行卡卡号的规则,常见银行卡卡号长度如下: 中国银行:19位 工商银行:16位或19位 农业银行:19位 建设银行:19位 交通银行:16位或19位 中信银行:16位或19位 招商银行:16位或19位 浦发银行:16位或19位 兴业银行:1…

    C# 2023年6月7日
    00
  • C# 中 “$” 符号的作用以及用法详解

    当在C#中使用字符串时,我们经常需要将一些变量或表达式的值嵌入到字符串中。使用传统的字符串连接方式比较繁琐,更好的选择是使用“$”符号创建格式化字符串,这种方法被称为字符串插值。 $符号的作用 在C#中,$符号可以用来创建格式化字符串。使用$符号创建的字符串,可以包含嵌入的表达式或变量,而不需要使用任何字符串串联符号,同时提供更加方便的可读性和代码清晰度。 …

    C# 2023年6月6日
    00
  • asp.net点击 查看更多 实现无刷新加载的实现代码

    下面是详细讲解“ASP.NET点击查看更多实现无刷新加载的实现代码”的攻略: 一、实现原理 在ASP.NET中,我们可以使用Ajax实现无刷新加载。Ajax的原理是通过JavaScript中的XMLHttpRequest对象向服务器发送异步请求,然后通过DOM操作把返回的数据实时更新到网页中。实现的步骤大概如下: 创建XMLHttpRequest对象。 向服…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部