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 |