본문 바로가기
C#

C# Delegate 심플예제[Case1] - Event + Delegate 사용 ( Delegate를 통해서 다른 클래스 함수에 지정된 인자값으로 맞추어 함수 호출)

by 따봉이 2021. 12. 12.
728x90
반응형

Delegate Case 1

case 1 event + delegate

Event + Delegate 조합, 기본적인 Delegate 사용법이다. 

특정 이벤트나 작업 완료 시 다른 객체의 함수를 호출할 때

그 함수의 정해진 인자값으로 함수를 호출하고 싶을때 사용한다. 

 

다음은 남편이 회사로 부터 급여를 받으면 그 급여가 아내의 통장으로 "자동"으로 이제 되는 시나리오로

예제 심플코드를 짜보았다. 

 

Man : 남편 (form class)

Wife : 아내 (Class)

 

먼저 아내 클래스이다. 

    public class wife
    {
        //아내 계좌 (입출금)
        private List<wifeBankAccount> WifeDepositList = new List<wifeBankAccount>();

        //급여 받기 함수
        public void SalaryRecive(int _salary, string _name)
        {
            //델리게이트 호출로 넘어온 급여를 아내의 계좌로 넣어준다.
            wifeBankAccount _Recive = new wifeBankAccount();
            _Recive.name = _name;
            _Recive.Amt = _salary;

            WifeDepositList.Add(_Recive);
            MessageBox.Show("Wife님에게 급여 이체가 완료되었습니다.");

            //입금된 내역 표시
            ShowMoneyList();

        }

        public void ShowMoneyList()
        {
            string msg = string.Empty;
            foreach(var list in WifeDepositList)
            {
                msg = msg + string.Format("입금자 : {0} , 입금액 : {1}", list.name, list.Amt) + Environment.NewLine;
            }

            MessageBox.Show(msg);

        }

    }

    //아내 계좌
    public class wifeBankAccount
    {
        public string name;
        public int Amt;
    }

 

 

 

아래는 남편 클래스(폼)이다.

 

public partial class Man : Form
    {
        //델리게이트
        public delegate void SalaryTossEvent(int Salary, string name);
        //델리게이트 이벤트
        public event SalaryTossEvent SalaryToss;

        public Man()
        {
            InitializeComponent();
        }

        private void Man_Load(object sender, EventArgs e)
        {
            //폼이 생성되면서 아내 객체를 생성한다. 
            wife MyWife = new wife();

            //남편이 급여를 받으면 자동으로 아내 통장으로 입금되도록 이벤트를 연결한다. 
            SalaryToss += MyWife.SalaryRecive;
        }


        private void button1_Click(object sender, EventArgs e)
        {
            //급여입금
            int JuneSalary = 1000000;
            string Name = "니남편";

            MessageBox.Show(string.Format("6월 급여가 {0}원 입급되었습니다.", JuneSalary.ToString()));

            //델리게이트 이벤트 호출로 자동으로 아내에게 급여이체
            SalaryToss(JuneSalary, Name);

            JuneSalary = 0;

            MessageBox.Show("6월급여가 로그아웃했습니다.");


        }


    }

 

 

728x90
반응형

댓글