Удивительное поведение интерфейсов
От: Аноним  
Дата: 11.07.08 13:27
Оценка:
Вот в таком коде:

using System;

class A : IDisposable
{
    void IDisposable.Dispose()
    {
        Console.WriteLine("A::IDisposable.Dispose");
    }

    public virtual void Dispose()
    {
        Console.WriteLine("A::Dispose");
    }
}

class B : A, IDisposable
{
    public override void Dispose()
    {
        Console.WriteLine("B::Dispose");
    }

    static void Main()
    {
        ((IDisposable)(A)new B()).Dispose();
    }
}


вызывается B::Dispose. А казалось бы, должен вызываться A::IDisposable.Dispose, потому что специально вставлены операторы приведения типа.
Почему так происходит? И как это обойти, чтобы все-таки вызвался A::IDisposable.Dispose?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.