I have a game with such events as GameOver, GameStart, PlayerWin, etc. I only have one class that is listening on these events, for the purpose of sending these events as TCP json messages to a client (player).But for every important game function I write, I have to write an event and then call if(MyEvent != null)   MyEvent(this, new GameEventArgs(gameover));I could as easily avoid writing an event for each important action and instead include the listener as an instantiated class and simply send messages that way.private GameListener gameListner = new GameListener();private void GameOver(){    this.turnTimer.enabled = false;    this.winner = player; //etc    gameListener.GameOver(player);}class GameListener{    public void GameOver(Player player){        JSON json = EncodeJson(GAME_OVER, player);        SendClientData(json);    }}Is there any reason I should stick to events and delegates?
Is there any reason to write delegates/events for one class?
c#
The benefit of events compared to your approach is that more than one or less than one objects can listen to an event. In your case, there could be one and one only game listener.You may stick with YAGNI and KISS: right now, you have only one object listening to the event, so why bothering?On the other hand, using events, especially if you consider EventHandler<TEventArgs> generic, is:Very easy to implement,Very common in C# world, so other programmers will probably know how to use your code,Supports from scratch the case when you don't need to listen to the event at all or when multiple listeners exist (for instance, one will send a message over TCP while other will store the new score of the user in the database.)