출처: https://www.csharpstudy.com/CSharp/CSharp-event.aspx
대리자 (Deligate)는 무엇인가?
- 대리자와 같은 이벤트는 런타임에 바인딩 메커니즘
- 이벤트의 형식은 대리자 형
- 대리자(Delegate)는 C#에서 메서드에 대한 참조를 나타내는 특별한 형식
- 대리자를 사용하면 메서드를 변수처럼 사용할 수 있음
- 아래와 같이 event 키워드를 사용할 수 있음 아래를 보면 FileLister안에 Progress가 있는 것이 보임
public event EventHandler<FileListArgs> Progress;
======>
public class FileListArgs : EventArgs
{
public string FoundFile { get; set; }
}
public class FileLister
{
public event EventHandler<FileListArgs> Progress;
public void ListFiles(string directory)
{
foreach (var file in Directory.GetFiles(directory))
{
OnProgress(new FileListArgs { FoundFile = file });
}
}
protected virtual void OnProgress(FileListArgs e)
{
Progress?.Invoke(this, e);
}
}
- FileLister 이라는 Class 안에 Progress 이벤트를 통해서 += 로 이벤트를 등록할 수 있다.
- 또한 ?. 연산자를 통해서 이벤트에 대한 구독자가 없을 때 이벤트를 발생시키지 않도록 할 수 있다.
Progress?.Invoke(this, new FileListArgs(file));