Вот в таком коде:
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?