У меня есть интерфейс:
interface IServerListener
{
void onServerStarted();
void onSessionStarted();
void onSessionCompleted(List<string> data);
}
И есть метод, который получает экземпляр этого интерфейса для выполнения методов:
public void start(IServerListener listener)
{
IPEndPoint hostPoint = new IPEndPoint(IPAddress.Parse(getLocalHost()), PORT);
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(hostPoint);
serverSocket.Listen(5);
listener.onServerStarted(); //Calling
while(true)...
}
Когда я выполняю этот метод (начало) из основного класса формы, я хочу передать в параметры именно анонимный класс, который реализует этот интерфейс, чтобы иметь доступ к использованию элементов формы:
private void Form1_Load(object sender, EventArgs e)
{
server = new Server();
server.start(new IServerListener()
{
void onServerStarted()
{
rtxtOutput.AppendText("Started... ");
}
void onSessionCompleted(List<string> data)
{
rtxtOutput.AppendText("Session completed: " + String.Join(", ", data));
}
void onSessionStarted()
{
rtxtOutput.AppendText("New session started... ");
}
});
}
Но я не могу сделать это так, как я это делал в Java . Я получаю следующее сообщение:
Cannot create an instance of the abstract class or interface 'IServerListener'
Поэтому я попытался создать отдельный класс, который реализует этот интерфейс и уже там делает то, что мне нужно. Но я не могу получить доступ к использованию элементов формы оттуда:
private class AnonymousIServerListener : IServerListener
{
public void onServerStarted()
{
rtxtOutput.AppendText("Started... ");
//The name 'rtxtOutput' does not exist in the current context
}
public void onSessionCompleted(List<string> data)
{
rtxtOutput.AppendText("Session completed: " + String.Join(", ", data));
//The name 'rtxtOutput' does not exist in the current context
}
public void onSessionStarted()
{
rtxtOutput.AppendText("New session started... ");
//The name 'rtxtOutput' does not exist in the current context
}
}
Скажите, пожалуйста, что делать в этом случае без костылей. Можно ли вообще использовать анонимный класс в C # ? Если нет, что делать в этом случае?
Заранее спасибо. С уважением ...