프로그래밍/.NET
[C#]Delegate
건깡
2013. 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);