Почему происходит динамическое связывание при использовании наследования интерфейса? - PullRequest
25 голосов
/ 10 марта 2012

В C #, пожалуйста, кто-нибудь знает, почему я не могу сделать следующее?(в частности, строка, помеченная как «НЕТ!, но динамически связанный вызов дает мне:

Unhandled Exception: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: No overload for method 'Add' takes '1' arguments
   at CallSite.Target(Closure , CallSite , B , Object )
   at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid2[T0,T1](CallSite site, T0 arg0, T1 arg1)
   at Program.Main(String[] args) in C:\Users\Stuart\Documents\Visual Studio 2010\Projects\CSharp Testbed\Program.cs:line 218

Ответы [ 2 ]

12 голосов
/ 11 марта 2012
0 голосов
/ 11 марта 2012

Похоже, что несколько уровней наследования интерфейса делают при передаче переменной динамического типа.Это определенно отключает привязку во время выполнения.

На данный момент, если вы хотите, чтобы он заработал, возможный обходной путь:

dynamic x = 23;
b.Add((object)x);

dynamic y = "Hello, World!";
b.Add((object)y);

Поскольку динамический объект рассматривается как объектIL, поэтому приведение всего явно к типу object заставит это работать на вас.

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