我正在使用Microsoft的EnvDTE Assemblies,并且我注意到基本类型不包括最新接口所独有的方法/属性。例如,AddFromTemplateEx方法。
DTE dte = (DTE) ((IServiceProvider) Host).GetCOMService(typeof(DTE));
Solution4 solution = (Solution4)dte.Solution; //Solution4 is an interface
WriteLine(solution.GetType().FullName);
上面的代码写出:
EnvDTE.SolutionClass
但是EnvDTE.SolutionClass不包含AddFromTemplateEx()的实现。我很困惑,因为我仍然可以使用Solution4接口中的方法,但是我看不出在SolutionClass中是否没有实现它们。
这里发生了什么魔术? SolutionClass是MarshaledbyRef,其基本类型是System._ComObject ...这是否与基础COM对象上存在的接口实现有关,而不与基本类型有关?