RuntimeBinderException & dynamic
От: samius Япония http://sams-tricks.blogspot.com
Дата: 06.06.10 18:23
Оценка:
Всем привет!

Наткнулся на странное поведение, взял кусок кода и упростил его до минимума.
interface IFoo
{
    void Foo(int[] v);
}

interface IFoo2
    : IFoo // (1)
{
    //void Foo(int[] v); // (2)
}

class FooImpl : IFoo2
{
    public void Foo(int[] v)
    {
    }
}

class Program
{
    static void Bar(IFoo2 foo, dynamic v)
    {
        foo.Foo(v); // (3)
        // new FooImpl().Foo(v); // (4)
    }

    static void Main()
    {
        Bar(new FooImpl(), new[] {1, 2, 3});
    }
}


Этот код кидает исключение RuntimeBinderException с сообщением

'ConsoleApp.IFoo' does not contain a definition for 'Foo'


Однако, если закомментировать линию, помеченную (1) и раскомментировать линию (2), то все работает. Работать так же будет и тот случай, когда в исходном варианте закомментировать линию (3) и раскомментировать (4).

Есть у кого-нибудь идеи, почему так происходит?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.