Como declarar e implementar uma interface COM em C # que herda de outra interface COM?

Estou tentando entender o que é correto por que implementar interfaces COM a partir do código c #. É simples quando a interface não herda de outra interface base. Como este:

[ComImport, Guid("2047E320-F2A9-11CE-AE65-08002B2E1262"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IShellFolderViewCB
{
  long MessageSFVCB(uint uMsg, int wParam, int lParam);
}

No entanto, as coisas começam a ficar estranhas quando eu preciso implementar uma interface que herda de outras interfaces COM. Por exemplo, se eu implementar oIPersistFolder2 interface que herda deIPersistFolder que herda deIPersist como eu normalmente no código C #:

[ComImport, Guid("0000010c-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IPersist
{
  void GetClassID([Out] out Guid classID);
}

[ComImport, Guid("000214EA-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IPersistFolder : IPersist
{
  void Initialize([In] IntPtr pidl);
}

[ComImport, Guid("1AC3D9F0-175C-11d1-95BE-00609797EA4F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IPersistFolder2 : IPersistFolder
{
  void GetCurFolder([Out] out IntPtr ppidl);
}

O sistema operacional não pode chamar os métodos na minha implementação de objeto. Quando estou depurando, posso ver o construtor do meuIPersistFolder2 A implementação é chamada muitas vezes, no entanto, os métodos de interface que eu implementei não são chamados. Estou implementando oIPersistFolder2 do seguinte modo:

[Guid("A4603CDB-EC86-4E40-80FE-25D5F5FA467D")]
public class PersistFolder: IPersistFolder2
{
  void IPersistFolder2.GetClassID(ref Guid classID) { ... }
  void IPersistFolder2.Initialize(IntPtr pidl) { ... }
  void IPersistFolder2.GetCurFolder(out IntPtr ppidl) { ... }
}

O que parece estranho é que, quando declaro que a interface COM é importada da seguinte forma, ela funciona:

[ComImport, Guid("0000010c-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IPersist
{
  void GetClassID([Out] out Guid classID);
}

[ComImport, Guid("000214EA-0000-0000-C000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IPersistFolder : IPersist
{
  new void GetClassID([Out] out Guid classID);
  void Initialize([In] IntPtr pidl);
}

[ComImport, Guid("1AC3D9F0-175C-11d1-95BE-00609797EA4F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IPersistFolder2 : IPersistFolder
{
  new void GetClassID([Out] out Guid classID);
  new void Initialize([In] IntPtr pidl);
  void GetCurFolder([Out] out IntPtr ppidl);
}

Não sei por que funciona quando declaro as interfaces COM dessa maneira (ocultando os métodos da interface base usandonew) Talvez esteja relacionado à maneira como o IUnknown funciona. Alguém sabe qual é a maneira correta de implementar interfaces COM em c # que herda de outras interfaces COM e por quê?

questionAnswers(1)

yourAnswerToTheQuestion