Вы можете использовать явные реализации интерфейса, как это:
interface IShape
{
bool Intersect(IShape shape);
}
class Circle : IShape
{
bool IShape.Intersect(IShape shape) { return Intersect((Circle)shape); }
public bool Intersect(Circle shape) { ... }
}
Однако, это делает ваш код очень небезопасным, потому что вы можете написать что-то вроде этого и при этом пройти компиляцию:
IShape s = new Circle();
s.Intersect(new Rectangle());
Выше приведено исключение во время выполнения.
Используйте это с осторожностью.