프로그래밍/.NET2013. 2. 10. 14:07

Delegate(대리자)

 대리자 : 무엇인가의 일을 대신해주는 사람

 - 어떠한 기능(메서드)을 대신 수행해주는 역활

 - C언어의 함수 포인터와 비슷 


Program.cs

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

namespace DelegateAnonymousLambda
{
    class BatteryLevel
    {
        int currentBatteryLevel;

        // 델리게이트 선언
        public delegate void BatteryLevelBroadcaster(int batteryLevel);
        public BatteryLevelBroadcaster batteryLevelBroadcaster;

        public int CurrentBatteryLevel
        {
            get
            {
                return currentBatteryLevel;
            }
            set
            {
                currentBatteryLevel = value;

                if (batteryLevelBroadcaster != null)
                {
                    batteryLevelBroadcaster(currentBatteryLevel);
                }
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            BatteryLevel batteryLevel = new BatteryLevel();

            // 현재 클래스가 알고 있는 메서드 위임
            batteryLevel.batteryLevelBroadcaster += new BatteryLevel.BatteryLevelBroadcaster(BatteryLevelIndicator);

            batteryLevel.CurrentBatteryLevel = 35;
            batteryLevel.CurrentBatteryLevel = 30;
            batteryLevel.CurrentBatteryLevel = 25;
            batteryLevel.CurrentBatteryLevel = 20;
            batteryLevel.CurrentBatteryLevel = 15;

            Console.ReadLine();
        }

        public static void BatteryLevelIndicator(int newValue)
        {
            Console.WriteLine("New battery level is: {0}", newValue);
        }
    }
}


위에서 보듯이, Program 클래스가 알고 있는 메서드를 BatteryLevel 클래스에서 호출하였습니다.

그리고 하나의 메서드가 아닌 여러개를 추가하거나 삭제할 수도 있습니다.


Program.cs

         static void Main(string[] args)
         {
            BatteryLevel batteryLevel = new BatteryLevel();

            // 현재 클래스가 알고 있는 메서드 위임
            batteryLevel.batteryLevelBroadcaster += new BatteryLevel.BatteryLevelBroadcaster(BatteryLevelIndicator);
            batteryLevel.batteryLevelBroadcaster += new BatteryLevel.BatteryLevelBroadcaster(BatteryLevelIndicator);





'프로그래밍 > .NET' 카테고리의 다른 글

[C#]메일 전송(SMTP)  (0) 2013.02.12
[C#]대리자 Func<> / Action<>  (0) 2013.02.10
[C#]LINQ to XML  (0) 2013.02.09
[C#]const, readonly 상수  (1) 2013.02.09
[C#]DataTable -> CSV 변환  (0) 2013.02.07
Posted by 건깡