Вопрос о делегатах - PullRequest
       4

Вопрос о делегатах

0 голосов
/ 30 ноября 2010

Я пытаюсь прочитать код, который не написал. В основной части класса есть следующие 2 строки.

// RenderingService callbacks
protected RenderingServiceResponsesDelegate renderingServiceResponsesDelegate;
public delegate void RenderingServiceResponsesDelegate(Collection<RenderingServiceResponse> responses);

Теперь я никогда не использовал делегатов в C #, но читал, что есть три шага (объявление, создание экземпляра и вызов). 2-я строка выглядит как объявление, а 1-я строка - как первый шаг в реализации. Внутри конструктора класса есть следующая строка:

//Inside the constructor
this.renderingServiceResponsesDelegate = renderingServiceResponsesDelegate;

где renderServiceResponsesDelegate - параметр, передаваемый конструктором. Так что это будет вторая часть реализации. Это правильно поняли? Я был смущен порядком вещей. Можно ли создать такой экземпляр в c # до того, как он был объявлен?

Ответы [ 2 ]

2 голосов
/ 30 ноября 2010

Это объявление типа делегата:

public delegate void RenderingServiceResponsesDelegate(Collection<RenderingServiceResponse> responses);

Это объявление члена этого типа делегата:

 protected RenderingServiceResponsesDelegate renderingServiceResponsesDelegate;

Это присвоение ранее инстанцированного экземпляра этому члену:

this.renderingServiceResponsesDelegate = renderingServiceResponsesDelegate;

renderingServiceResponsesDelegate указывает на определенный метод экземпляра объекта или статический метод.

Предыдущее воплощение могло выглядеть так:

SomeClassThatHasTakesTheDelegateInstance c = new SomeClassThatHasTakesTheDelegateInstance (new RenderingServiceResponsesDelegate (this.SomeMethodThatMatchesTheDelegateSignature));

Тогда вызов будет выглядеть так:

this.renderingServiceResponsesDelegate(someResponses);
2 голосов
/ 30 ноября 2010

Вторая строка - это объявление типа RenderingServiceResponsesDelegate.

Первая строка - это объявление переменной с этим типом . Это не экземпляр.

Строка внутри конструктора присваивает значение переменной - но в вашем примере это значение получено из другого места. Создание экземпляров означает создание экземпляра, что часто выполняется с помощью ключевого слова new. В вашем примере вы не предоставили код, в котором выполняется создание экземпляра.

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