前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#事件和代理的简单示例程序

C#事件和代理的简单示例程序

作者头像
ccf19881030
发布2023-12-18 12:30:08
1020
发布2023-12-18 12:30:08
举报
文章被收录于专栏:ccf19881030的博客ccf19881030的博客

C#事件和代理的简单示例程序

这个视频对于C#中事件和委托(代理)的讲解和示例讲得很清晰明了。 首先创建一个EventAndDelegates的C# .Net控制台程序,然后输入对应的代码,运行。

程序代码如下:

Video实体类

Video.cs

代码语言:javascript
复制
using System;

namespace EventAndDelegates
{
    public class Video
    {
        public String Title { get; set; }
    }
}

VideoEncoder类-事件发布者

VideoEncoder.cs

代码语言:javascript
复制
using System;
using System.Threading;

namespace EventAndDelegates
{
    public class VideoEventArgs : EventArgs
    {
        public Video Video { get; set; }
    }

    public class VideoEncoder
    {
        // 1- Define a delegate
        // 2- Define an event based on that delegate
        // 3- Raise the event

        // C#中的代理delegate有些类似于C++中的函数指针
        //public delegate void VideoEncodedEventHandler(object source, VideoEventArgs e);

        //public event VideoEncodedEventHandler VideoEncoded;

        // EventHandler
        // EventHandler<TEventArgs>

        public EventHandler<VideoEventArgs> VideoEncoded;

        public void Encode(Video video)
        {
            Console.WriteLine("Encoding Video..." + video.Title);
            Thread.Sleep(3000);

            OnVideoEncoded(video);
        }

        protected virtual void OnVideoEncoded(Video video)
        {
            if (VideoEncoded != null)
            {
                VideoEncoded(this, new VideoEventArgs { Video = video });
            }
        }

    }
}

MailService类-事件订阅者

MailSerive.cs

代码语言:javascript
复制
using System;

namespace EventAndDelegates
{
    public class MailService
    {
        public void OnVideoEncoded(object source, VideoEventArgs args)
        {
            Console.WriteLine("MailService: Send an email..." + args.Video.Title);
        }

    }
}

MessageService类-事件订阅者

MessageService.cs

代码语言:javascript
复制
using System;

namespace EventAndDelegates
{
    public class MessageService
    {
        public void OnVideoEncoded(object source, VideoEventArgs e)
        {
            Console.WriteLine("MessageService: Send an text message..." + e.Video.Title);
        }
    }
}

主程序-main函数

Program.cs

代码语言:javascript
复制
using System;

namespace EventAndDelegates
{
    public class Program
    {
        static void Main(string[] args)
        {
            var video = new Video() { Title = "Video 1" };
            var videoEncoder = new VideoEncoder();  // publisher
            var mailService = new MailService();    // subscriber
            var messageService = new MessageService();

            videoEncoder.VideoEncoded += mailService.OnVideoEncoded;
            videoEncoder.VideoEncoded += messageService.OnVideoEncoded;

            videoEncoder.Encode(video);
        }
    }
}

运行结果

程序运行结果如下图所示:

程序运行结果
程序运行结果
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C#事件和代理的简单示例程序
  • 程序代码如下:
    • Video实体类
      • VideoEncoder类-事件发布者
        • MailService类-事件订阅者
          • MessageService类-事件订阅者
            • 主程序-main函数
              • 运行结果
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档