Причина в том, что эти методы существуют только для реализации I-интерфейса, а не для расширения открытого интерфейса класса.
Я имею в виду, что если у вас есть следующее:
public class MyClass : IConvertible
{
// implementation
}
Возможно, вы хотите, чтобы MyClass был конвертируемым, поэтому вы можете передавать ссылки на него методам, которые ожидают IConvertible:
public void DoSomethingWithConvertible(IConvertible conv)
Но вы можете не захотеть, чтобы переменные типа MyClass представляли методы Convert. Вы просто не хотите, чтобы открытый интерфейс MyClass имел этот метод, тогда вы реализуете интерфейс явно. Вот и вся идея подхода. Это означает, что следующее не разрешено:
MyClass a = new MyClass();
a.Convert();
Тем не менее, по-прежнему допускается следующее:
MyClass a = new MyClass();
((IConvertible)a).Convert();
Вся идея этого заключается в том, что, хотя мы используем точно такой же экземпляр, метод MyClass не имеет метода. А как у IConvertible есть метод. Думайте об этом, как будто вы позволяете инстансу иметь раздвоение личности.
Обычно я заканчиваю реализацию каждого интерфейса неявно. Однако есть очень специфические ситуации, в которых я бы реализовал их явно именно по причинам, изложенным выше.
Кстати, спасибо за отличный вопрос!