Как вызвать объект делегата - PullRequest
0 голосов
/ 01 июня 2018

Привет, я новичок в C # и в настоящее время работаю над приложением, использующим некоторые сторонние API.Я натолкнулся на две строки кода, которые ценят, если вы могли бы помочь.Ниже приведен код, аналогичный действующему образцу кода, который у меня есть

bank.Account.NewAcc += delegate (Customer customerInfo) {
   Console.WriteLine ("Customer Name : " + customerInfo.Name);
};

bank.Account.NewAcc - это событие, а Customer - это класс.

Ниже приведены вопросы:

  1. Можем ли мы создать делегата object, а не method?

  2. Как я могу его вызвать?У меня нет никакой другой информации, предоставленной API

Большое спасибо.

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

В вашем примере кода анонимный делегат с одним параметром типа CustomerInfo был связан с событием с именем NewAcc.

Как только событие NewAcc сработает, связанные делегаты будутЧтобы выполнить событие, код для запуска / вызова события может выглядеть следующим образом:

public Class BankAccount {.....

    protected virtual void OnNewAcc(CustomerInfo customerInfo)
    {
        CustomerEventHandler handler = NewAcc;
        if (handler != null)
        {
            handler(this, customerInfo);
        }
    }

    public event CustomerEventHandler NewAcc;

....}

Надеюсь, это ответило на ваш вопрос.

0 голосов
/ 01 июня 2018
  1. Я не совсем уверен, что вы подразумеваете под делегатом "объекта".Я сомневаюсь, что вы можете, хотя.Делегаты представляют список методов, которые будут вызваны.Вы не можете просто присвоить ему значение object.

  2. Вы не вызываете (или повышаете ) события.API делает.Судя по названию NewAcc, я думаю, событие будет возбуждено при создании новой учетной записи.Попробуйте сделать это с bank.Account.Вы можете увидеть информацию о клиенте, которая будет напечатана.Очевидно, это не будет работать на 100%.Вы должны заглянуть внутрь bank.Account, чтобы точно знать, когда будет инициировано событие (или просто спросить человека, который его написал).

Обратите внимание, что делегат может быть написан с лямбда-выражениемвыражение:

bank.Account.NewAcc += (customerInfo) => Console.WriteLine ("Customer Name : " + customerInfo.Name);
0 голосов
/ 01 июня 2018

Пожалуйста, найдите ниже ответы на ваши вопросы согласно моим знаниям:

1.Можем ли мы создать делегат объекта, а не метода?

Нет.Ты не можешьПотому что делегаты означают указатель на функцию.Они могут содержать только ссылки на функции.И подпись метода должна совпадать с подписью делегата.

2.Как я могу вызвать это?У меня нет никакой другой информации от API

Делегат, который связан с событием как обработчик события, может быть вызван двумя способами.Во-первых, когда событие будет вызвано, во-вторых, когда вы вызываете событие программно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...