两者都是接口,Application
接口继承自 _Application
接口(还包括 ApplicationEvents4_Event
接口)。
那么何时使用哪个?MSDN 中已经解释了区别(重点标出):
Application interface:
[GuidAttribute("00020970-0000-0000-C000-000000000046")]
public interface Application : _Application,
ApplicationEvents4_Event
这是一个从COM coclass派生出来的.NET接口,用于与相应的COM对象进行交互以便于托管代码。使用此派生接口访问COM对象的所有方法、属性和事件成员。但是,如果您想要使用的方法或事件在同一COM对象下具有相同的名称,请转换为相应的主要接口以调用该方法,并转换为最新的事件接口以连接到事件。请参阅此主题以获取有关COM对象的信息。
_Application接口:
[TypeLibType(4304)]
[Guid("00020970-0000-0000-C000-000000000046")]
[ComImport]
public interface _Application { ... }
这是一个COM coclass中的主要接口,用于与相应的COM对象进行互操作所需的托管代码。只有当您想使用的方法与COM对象的事件名称相同时,才使用此主要接口;在这种情况下,将其转换为此接口以调用方法,并转换为最新的事件接口以连接到事件。否则,请使用从COM coclass派生的.NET接口来访问COM对象的方法、属性和事件。
实际后果如下:在您的代码中使用Application而不是_Application,除非由于方法名和事件名之间存在歧义而不得不这样做。
在编程中存在一个歧义,例如
Application.Quit
事件(当应用程序退出时触发)和
Application.Quit(ref Object SaveChanges, ref Object OriginalFormat, ref Object RouteDocument)
方法(调用时退出应用程序)之间的歧义。
为了调用该方法,你可以简单地编写以下内容(例如,不提示保存更改即退出):
Application.Quit(false);
然而,这可能会导致编译器警告:
警告3:方法'Microsoft.Office.Interop.Word._Application.Quit(ref object,ref object,ref object)'和非方法'Microsoft.Office.Interop.Word.ApplicationEvents4_Event.Quit'之间的歧义。使用方法组。
为了避免警告,您可以将应用程序对象转换为“_Application”接口。
((_Application)Application).Quit(false);
如果您想订阅事件,您需要将应用程序对象转换为适当的事件接口:
((ApplicationEvents4_Event)Application).Quit += OnApplicationQuit;
private void OnApplicationQuit()
{
}