Por que o compilador C # insere uma implementação explícita da interface?

Encontrei um caso estranho de borda de C # e estou procurando uma boa solução alternativa.

Há uma classe que eu não controlo que se parece com isso:

namespace OtherCompany
{
    public class ClassIDoNotControl
    {
        public void SomeMethod(string argument)
        {
            Console.WriteLine((new StackFrame(1).GetMethod().Name));
        }
    }
}

Eu gostaria de herdar desta classe em uma classe que euFaz ao controle. Além disso, gostaria de especificar uma interface:

interface IInterfaceIDoControl
{
    void SomeMethod(string argument);
}

class ClassIDoControl : OtherCompany.ClassIDoNotControl, IInterfaceIDoControl
{
}

Se todos esses arquivos estiverem no mesmo assembly, tudo funcionará bem:

namespace MyCompany
{
    class Program
    {
        static void Main(string[] args)
        {
            IInterfaceIDoControl i = new ClassIDoControl();
            i.SomeMethod("Hello World!"); // Prints "Main"
        }
    }
 }

Mas, se eu mover "ClassIDoNotControl" para outro assembly, não receberei o que esperava. Em vez disso, vejo "MyCompany.IInterfaceIDoControl.SomeMethod" para a saída, o que implica um quadro de pilha extra.

O motivo é que, nos bastidores, o compilador C # está alterando "ClassIDoControl" para ficar assim:

class ClassIDoControl : OtherCompany.ClassIDoNotControl, IInterfaceIDoControl
{
    void IInterfaceIDoControl.SomeMethod(string argument)
    {
        base.SomeMethod(argument);
    }
}

Existe uma maneira de evitar essa camada extra de indireção gerada pelo compilador com interfaces explicitamente implementadas?

questionAnswers(1)

yourAnswerToTheQuestion