프로그램/C# - Study / / 2010. 10. 13. 15:16

C# - Ex25Delegate 델리게이트

반응형

윈폼 부분
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ex25Delegate
{
    public partial class DelegateForm : Form
    {
        public DelegateForm()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Thank you for clicking me !!!");
        }
    }
}
---------------------------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ex25Delegate
{
    class Program
    {
        static void Main(string[] args)
        {

            OrderManager om = new OrderManager();
            FaxManager fm = new FaxManager();
            MailManager mm = new MailManager();

            //델리게이트 순서 4
            //델리게이트 변수에 델리게이트 등록
            om.OrderReceived +=
                new OrderReceivedHandler(fm.SendFax);
            om.OrderReceived +=
                new OrderReceivedHandler(mm.SendMail);

            om.ProcessOrder();

            DelegateForm form = new DelegateForm();
            form.ShowDialog();

        }
    }

    // 델리게이트 순서 1
    class OrderReceivedArgs : EventArgs
    {
        public int OrderNo;
    }
    //void (object, EventArgs) 메서드를 저장하는 델리게이트 선언
    delegate void OrderReceivedHandler(object sender, OrderReceivedArgs e);

    class OrderManager
    {
        // 델리게이트 순서 2
        //델리게이트 변수 선언
        //public OrderReceivedHandler OrderReceived;
        public event OrderReceivedHandler OrderReceived;  // 이벤트 추가

        public void ProcessOrder()
        {
            // 1. 주문데이터를 DB에 저장
            Console.WriteLine("주분을 정상적으로 처리했습니다.");
            // 2. 배송회사에 팩스보내기 및 3. 고객에게 메일 보내기
            //FaxManager fm = new FaxManager();
            //fm.SendFax();
            if (OrderReceived != null)
            {
                // 델리게이트 순서 5
                //델리게이트 호출 -> 델리게이트에 포함된 메서드 호출
                //OrderReceived(this, EventArgs.Empty);  아래를 줄인것ㅇ
                //OrderReceived.Invoke(this, EventArgs.Empty);
                OrderReceivedArgs args = new OrderReceivedArgs();
                args.OrderNo = 111;
                OrderReceived(this, args);
            }
        }
    }
    class FaxManager
    {                         // 델리게이트 순서 3
        public void SendFax(object sender, OrderReceivedArgs e)
        {
            Console.WriteLine("주문번호  : " + e.OrderNo);
            Console.WriteLine("팩스를 전송했습니다.");
        }

    }
    class MailManager
    {
        public void SendMail(object sender, OrderReceivedArgs e)
        {
            Console.WriteLine("주문번호  : " + e.OrderNo);
            Console.WriteLine("메일을 전송했습니다.");
        }
    }
}

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유