TcpClient.cs Code: namespace TCP_Communication { class TcpClient { // ... public delegate void OnDataAvailable(char[] data); // ... } } Program.cs Code: using System; using System.Collections.Generic; using System.Text; namespace TCP_Communication { class Program { static void Main(string[] args) { // ... Client.OnDataAvailable = DataArrived; // ... } public void DataArrived(char[] newdata) { // empty for now } } } Error: Yes, I tried 'TCP_Communication.TcpClient.OnDataAvailable' instead even though it is obviously wrong: Program.cs Code: using System; using System.Collections.Generic; using System.Text; namespace TCP_Communication { class Program { static void Main(string[] args) { // ... TCP_Communication.TcpClient.OnDataAvailable = DataArrived; // ... } public void DataArrived(char[] newdata) { // empty for now } } } This time it gives this error message: I read the article in MSDN about C# delegates, but still I can't find what I'm missing. Please help me guys, how can I fix this code?