виртуальные вызовы для переопределенных реализаций интерфейса

Если у меня есть два класса, которые оба реализуют интерфейс, но также и наследуются, нужно ли мне делать функцию виртуальной? например, дано:

interface IDoSomething
{
    void DoSomething();
}

class A : IDoSomething
{
    public void DoSomething()
    {
        //do A
    }
}

class B : A
{
    public new void DoSomething()
    {
        //do B
    }
}

Будет ли следующий код выполнять A или B?

IDoSomething doer = new B();
doer.DoSomething(); //do A or do B?

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

0
задан GazTheDestroyer 12 June 2012 в 11:27
поделиться