Why are delegates used here ?
I am reading this article. To learn about client-server communication https://www.codeproject.com/Articles/463947/Working-with-Sockets-in-Csharp I do understand what is happening till this line. AsyncCallback aCallback = new AsyncCallback(AcceptCallback); sListener.BeginAccept(aCallback, sListener); So "aCallback" is a delegate And there is a method AcceptCallback that is coupled that Delegate. (intermezzo question for native englisth people, what is beter english "a method that is" or "a method which is" ) Then this delegate is passed as parameter to a method. As far as I know delegate are a contract so all methods which want to communicate via this delegate follow the same definition structure. Why is this delegate created here ? Why not use the method itself ? like sListener.BeginAccept(AcceptCallback, sListener); Another question sListener.BeginAccept(aCallback, sListener); Why is the second parameter, the object itself ?