C# .net callback'и

369
08 августа 2017, 13:31

Здравствуйте, я забыл как объявлять callback'и, приведите пожалуйста пример callback'а, который возвращал как нибудь String и TcpClient, и собственно всё выглядело что-то типа ( а организация самого callback, была вынесена в другой class) ...

    Service.onRecieve += new onRecieveDelegate(onRecieve)
    private void onRecieve(TcpClient clnt, String str)
    {
        Console.WriteLine("User send : " + str);
    }

Я в интернете смотрел уже, не спорю, там много статей по этой теме, но все разные и не одна не похожа, на то как я раньше делал :(

Answer 1

В программировании Callback - это передача исполняемого кода в качестве одного из параметров другого кода. Для этой цели C# имеет делегаты.

public class MyTcpClient
{
    private TcpClient _clnt;
    public MyTcpClient()
    {
        _clnt = new TcpClient();
    }
    public void DoWork(Action<TcpClient, string> callBack)
    {
        // Делаем что-то...
        // Вызываем CallBack
        callBack?.Invoke(_clnt, "Некая строка");
    }
}

static void Main(string[] args)
{
    var client = new MyTcpClient();
    client.DoWork((tcpClient, s) =>
    {
        Console.WriteLine($"Получена строка {s}");
    });
}
Answer 2
public void RecieveDelegate(object, TcpClient, string);
public event RecieveDelegateChanged;
public void Constructor()
{
    RecieveDelegateChanged += (client, str) =>
    {
        /* Делаем что-то */
    };
}
public void RaiseReciveDelegate(TcpClient client, string message)
{
    RecieveDelegateChanged?.Invoke(this, client, message);
}
READ ALSO
Как сделать кнопку назад в Unity?

Как сделать кнопку назад в Unity?

Как сделать кнопку назад на Cancel, так, чтобы при возврате происходило автосохранение изменений в сцене из которой хотят выйти

647
@Url.Action не находит View

@Url.Action не находит View

Есть view: Views\WindowCalc\ChooseWindowcshtml Есть контроллер: Controllers\WindowCalcController

589
Разница в выбранном потоке между TaskCompletionSource и Task.Factory.StartNew

Разница в выбранном потоке между TaskCompletionSource и Task.Factory.StartNew

С практическим асинхронным программированием столкнулся относительно недавно, и, изучая тему детальнее, назрел вопрос: При создании задачи...

392
Связывание Entity Framework Core SqLite с WPF

Связывание Entity Framework Core SqLite с WPF

Как связать WPF с EF Core Sqlite и что прописывать в appconfig? Если нельзя связать

338