출처: 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));

+ Recent posts