C#中的委托和事件

yizhihongxing
  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日

相关文章

  • unity实现鼠标经过时ui及物体的变色操作

    实现鼠标经过时UI及物体的变色操作是Unity游戏开发中常见的操作之一,在以下内容中,我将详细讲解如何实现这个功能。 步骤一:添加事件触发器组件 首先,在需要变色的UI或物体上添加Event Trigger组件。在该组件下选择PointerEnter和PointerExit事件,并在事件右侧选择Add New。这样就可以添加新的触发事件。 在PointerE…

    C# 2023年6月3日
    00
  • C#程序员统计自己的代码行数

    下面是完整的攻略: C#程序员统计自己的代码行数 背景 当我们参与一个大型的C#项目时,我们可能需要了解我们自己编写的代码行数。通过统计代码行数,不仅可以让我们评估我们的工作量,还可以让我们更好地理解我们在项目中的贡献。在本文中,我们将介绍如何以一种简单的方式统计自己的代码行数。 攻略 下面是一种简单的方法来统计C#代码的行数: 步骤 1:安装cloc cl…

    C# 2023年6月7日
    00
  • c# .net 生成图片验证码的代码

    为了在C# .NET中生成图片验证码,我们可以遵循以下步骤: 步骤1:安装NuGet包 我们需要安装 ZXing 和 System.Drawing.Common 两个NuGet包,以便在C#代码中引用。 运行以下命令安装: Install-Package ZXing -Version 1.1.0 Install-Package System.Drawing.…

    C# 2023年5月31日
    00
  • 在 C# 中使用 Span 和 Memory 编写高性能代码的详细步骤

    在 C# 中,Span 和 Memory 是用于优化代码性能的关键类型。Span 是一种结构体类型,它将对象内存表示为连续的、可编辑的范围。Memory 则是一个类类型,可以包装一段内存以及操作该内存的方法。使用这两种类型,可以使代码更高效地使用内存和更快地执行。 下面介绍一些使用 Span 和 Memory 编写高性能代码的详细步骤。 步骤一:创建 Spa…

    C# 2023年6月3日
    00
  • Unity中 ShaderGraph 实现超级炫酷的溶解效果入门级教程

    这里是详细讲解“Unity中 ShaderGraph 实现超级炫酷的溶解效果入门级教程”的完整攻略。 介绍 在Unity中,ShaderGraph是一种非常方便和强大的工具,可以帮助开发者制作各种各样的shader。在本教程中,我们将使用ShaderGraph来制作一个超级炫酷的溶解效果。 设置材质 首先,我们需要为我们的模型设置一个材质,然后把这个材质放到…

    C# 2023年6月3日
    00
  • Visual Studio 未能加载各种Package包的解决方案

    Visual Studio无法加载Package解决方案错误的完整攻略 在使用Visual Studio时,你可能会遇到“未能加载各种Package包”的错误提示。这种情况通常是由于Visual Studio无法找到或加载所需的NuGet Package,而导致的。下面是解决此问题的完整攻略。 步骤一:查看Package控制台 在Visual Studio中…

    C# 2023年5月15日
    00
  • C# 内部类与Lambda表达式用法详解

    下面是“C# 内部类与Lambda表达式用法详解”的完整攻略: 1. C# 内部类 1.1 什么是内部类 在 C# 中,内部类又叫嵌套类,是指一个类定义在另一个类的内部。内部类可以访问外部类的成员,而外部类也可以访问内部类的成员。内部类可以使用 private、public、protected 和 internal 等访问修饰符,一般来说,内部类的访问修饰符…

    C# 2023年6月1日
    00
  • asp.net UpdaeProgress的简单用法

    下面是 “ASP.NET UpdateProgress的简单用法”的完整攻略: 什么是ASP.NET UpdateProgress? ASP.NET UpdateProgress 允许在触发异步操作时显示进度指示器。 我们可以使用 UpdatePanel 控件或自己的自定义异步回发来合并 UpdateProgress 控件。 如何实现ASP.NET Upda…

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