Это происходит только потому, что вы используете явную реализацию интерфейса. Например, это не компилируется:
using System;
using System.Diagnostics;
class CA : IDisposable
{
public void Dispose()
{
Debug.WriteLine("CA.Dispose");
}
}
class CB : CA, IDisposable
{
public void Dispose()
{
Debug.WriteLine("CB.Dispose");
}
}
Так что да, вам нужно быть осторожным с явной реализацией интерфейса. Это всегда так, поскольку в любом случае это немного странно с точки зрения системы типов.
Это не идеально, но явная реализация интерфейса есть частично для того, чтобы обойти неловкие ситуации, когда вы хотите иметь возможность переопределить интерфейс.
Если честно, если на позднем этапе вы решите, что базовый класс должен начать реализацию IDisposable
, вы все равно окажетесь в мире боли - потому что вам придется проверять каждое место, где вы его используете класс, чтобы определить, нужен ли вам оператор using
.