程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#操作Office警告:方法和非方法之間存在二義性

c#操作Office警告:方法和非方法之間存在二義性

編輯:C#入門知識

最近在做Office方面的開發工作,在操作Word時發現一處“二義性”的警告:

Word.Application.Quit 

分析了一下,原因比較簡單,先看下圖: 

Word.Application

Application繼承了兩個接口,兩個接口中都有一個名為“Quit”的成員:

    1. _Application中的Quit方法:void Quit(ref object SaveChanges, ref object OriginalFormat, ref object RouteDocument);
    2. ApplicationEvents4中的Quit事件:event ApplicationEvents4_QuitEventHandler Quit;

new Application() 返回的是類 ApplicationClass 的實例,ApplicationClass實現了以上接口:

Word.ApplicationClass

ApplicationEvents4.Quit事件實現的比較奇特(上圖258行),它的名字變成了ApplicationEvents4_Event。大概因為ApplicationClass類中已經有了一個名稱為Quit的方法(上圖片953行),出現了名稱沖突,所以要避讓一下(但不知道為什麼要采用這種方式)。DocumentBeforeClose事件因為不存在重名的成員,其名稱則與接口中定義保持一致。

雖然經過了這樣的處理,但ApplicationEvents4_Event.Quit並非顯式接口實現,於是出現了兩個“同名”成員:一個方法、一個事件(非方法)。在編譯時必須確定一個,可能方法的優先級高於事件,於是編譯器“將使用方法組”。

以上是我的大膽推測,不知道是否合理,還請高手指點。

注意:按F6編譯後這個警告會消失,項目重新生成後又會出現。

 

隨便提一下,c#中是不允許出現同名成員的(方法重載除外),如以下代碼是無法編譯通過的:

SameNameMembers 

這種情況下,必須顯示實現接口。

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved