Значение результата при реализации методов void через DynamicObject - PullRequest
3 голосов
/ 10 марта 2010

Я смотрю примеры переопределения TryInvokeMember на DynamicObject для реализации динамического связывания метода. Подпись выглядит следующим образом

public virtual bool TryInvokeMember(
    InvokeMemberBinder binder,
    Object[] args,
    out Object result
)

Очевидно, result используется для передачи результата обратно вызывающей стороне.

Поскольку для TryInvokeMember без параметра result out перегрузки нет, я предполагаю, что этот метод должен также обрабатывать методы void. В этом случае существуют ли какие-либо рекомендации для того, что result должно быть установлено?

Реализация по умолчанию на DynamicObject устанавливает result на ноль, и это будет моим выбором по умолчанию, но я не смог найти упоминаний об этом в примерах. Есть ли какие-либо руководящие принципы для этого? Имеет ли значение, какой будет результат?

Ответы [ 2 ]

4 голосов
/ 11 марта 2010

Да, просто используйте ноль в этом случае.

Ранее здесь было несколько похожих вопросов: Как я могу выразить вызов метода void как результат DynamicMetaObject.BindInvokeMember? Это о IDynamicMetaObjectProvider, но DynamicObject является лишь одной из его реализаций. Вкратце, DLR всегда будет что-то возвращать, оно не позволяет возвращать void.

Я посмотрю, что я могу сделать с документами MSDN. Я могу добавить примечание об этом в DynamicObject.TryInvokeMember .

0 голосов
/ 10 марта 2010

Я думаю, это не имеет значения, так как результат все равно будет игнорироваться ...

...