using System;
using System.Collections.Generic;
using System.Text;
 
namespace DelegatesAndEvents
{
    //1. Creating a simple class with just one property message as string
    public class Message
    {
        public string Msg { getset; }
    }
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
 
namespace DelegatesAndEvents
{
    //2. Create MessageEventArgs class wich inherits from EventArgs 
    //and has only one property with return type Message
    public class MessageEventArgs : EventArgs
    {
        public Message Message { getset; }
    }
 
    public class MessageEncoder
    {
        //3. Define a delegate
        //4. Define an event based on delegate
        //5. Raise the event
 
        //public delegate void MessageEncodedEventHandler(object source
        //, MessageEventArgs args);
        //public event MessageEncodedEventHandler MessageEncoded;
 
        //.NET introduced EventHandler, so no need 
        //to declare delegate and event seperately...
        public event EventHandler<MessageEventArgs> MessageEncoded;
 
        public void Encode(Message message)
        {
            Console.WriteLine("Message encoding...");
            Thread.Sleep(3000);
 
            OnMessageEncoded(message);
        }
 
        protected  void OnMessageEncoded(Message message)
        {
            if (MessageEncoded != null)
                MessageEncoded(thisnew MessageEventArgs 

Message= message
});         }     } }

 

using System;
using System.Threading;
 
namespace DelegatesAndEvents
{
    class Program
    {
        static void Main(string[] args)
        {
            var msg = new Message { Msg = "This is a message from system..." };
            var msgEncoder = new MessageEncoder();
 
            //subscriber below
            var messageService = new MessageService();
            msgEncoder.MessageEncoded += messageService.OnMessageEncoded;
            
            //another subscriber
            var mailService = new MailService();
            msgEncoder.MessageEncoded += mailService.OnMailEncoded;
 
            msgEncoder.Encode(msg);
 
            Console.ReadKey();
        }
    }
 
    public class MessageService
    {
        public void OnMessageEncoded(object source, MessageEventArgs args)
        {
            Console.WriteLine("Encoded message sent.."+ args.Message.Msg);
        }
    }
 
    public class MailService
    {
        public void OnMailEncoded(object source, MessageEventArgs args)
        {
            Console.WriteLine("Encoded mail sent.."+ args.Message.Msg);
        }
    }
}

 

blog comments powered by Disqus