Немного шокирует, что эта штука будет работать :)
using System; using System.Runtime.InteropServices; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { // ухты !!! IFoo i = new IFoo("Hello"); i.Print(); Console.WriteLine(i.GetType()); Console.ReadLine(); } [Guid("40DCF1C3-C39D-4BB0-B967-1391C56E2852")] [CoClass(typeof(Foo))] [ComImport] interface IFoo { void Print(); } class Foo : IFoo { private string _message; public Foo(string message) { _message = message; } public void Print() { Console.WriteLine(_message); } } } }К интерфейсу (во время компиляции!) "подвязывается" экземпляр дефолтового класса (что-то типа Activator.CreateInstance(Type.GetTypeFromClsid(GUID OF COCLASSTYPE)), и дальше все работает так, будто бы мы явно создавали экземпляр конкретного класса. Вникать историю развития COM особого желания нету, но пример забавный. К сожалению, трудно представить реальное применение этой фичи.