C# EmployeePlug類概述
C#有很多值得學(xué)習(xí)的地方,這里我們主要介紹C# EmployeePlug類,包括介紹主程序框架被設(shè)計(jì)為兩個(gè)程序集等方面。
插件在EmployeePlug.cs和CustomerPlug.cs中定義。列表三展示了C# EmployeePlug類的部分定義。下面是一些關(guān)鍵點(diǎn)。
1。這個(gè)類實(shí)現(xiàn)了IPlug接口。由于主程序根本不會(huì)知道插件內(nèi)部的類是如何定義的,這非常重要,主程序需要使用IPlug接口和各個(gè)插件通信。這種設(shè)計(jì)利用了面向?qū)ο蟾拍罾锩娴亩鄳B(tài)性。多態(tài)性允許運(yùn)行時(shí),可以通過(guò)指向基類的引用,來(lái)調(diào)用實(shí)現(xiàn)派生類中的方法。
2。這個(gè)類被兩個(gè)屬性標(biāo)識(shí),這樣主程序可以判斷這個(gè)插件是不是有效的。在C#中,要給一個(gè)類標(biāo)識(shí)一個(gè)屬性,你得在類的定義之前聲明屬性,內(nèi)容附在括號(hào)內(nèi)。
3。簡(jiǎn)明起見,例子只是使用了直接寫入代碼的數(shù)據(jù)。而如果這個(gè)插件是個(gè)正式的產(chǎn)品,那么數(shù)據(jù)總是應(yīng)該放在數(shù)據(jù)庫(kù)中或者文件中,各自所有的數(shù)據(jù)都應(yīng)該僅僅由插件本身來(lái)管理。C# EmployeePlug類的數(shù)據(jù)在這里用EmployeeData對(duì)象來(lái)存儲(chǔ),那也是一個(gè)類型并且實(shí)現(xiàn)了IPlugData接口。IPlugData接口在IPlugData.cs中定義,它提供了最基礎(chǔ)的數(shù)據(jù)交換功能,用于主程序和插件之間的通訊。所有支持IPlugData接口的對(duì)象在下層數(shù)據(jù)變化的時(shí)候?qū)⑻峁┮粋€(gè)通知。這個(gè)通知實(shí)際上就是DataChanged事件的發(fā)生。
4。當(dāng)主程序需要顯示某個(gè)插件所含數(shù)據(jù)列表的時(shí)候,它會(huì)調(diào)用GetData方法。這個(gè)方法返回IPlugData對(duì)象的一個(gè)數(shù)組。這樣主程序就可以對(duì)數(shù)組中的每個(gè)對(duì)象使用ToString方法得到數(shù)據(jù)以建立樹的各個(gè)節(jié)點(diǎn)。ToString方法是EmployeeData類的一個(gè)重載,用于顯示雇員的名字。
5。IPlug接口也定義了Save和Print方法。定義這兩個(gè)方法的目的在于當(dāng)有需要打印或者保存數(shù)據(jù)的時(shí)候,要通知一個(gè)插件。EmployeePlug 類就是用于實(shí)現(xiàn)打印和保存數(shù)據(jù)的功能的。在使用Save方法的時(shí)候,需要保存數(shù)據(jù)的位置將會(huì)在方法調(diào)用的時(shí)候提供。這里假設(shè)主程序會(huì)向用戶查詢路徑等信息。路徑信息的查詢是主程序提供給各個(gè)插件的服務(wù)。對(duì)于Print方法,主程序?qū)堰x項(xiàng)和內(nèi)容傳遞到
System。Drawing。Printing。PrintDocument類的實(shí)例。這兩種情況下,和用戶的交互操作都是一致的由主程序提供的。
主程序框架被設(shè)計(jì)為兩個(gè)程序集。***個(gè)程序集是Host.exe,它提供了主程序的Windows窗體界面。第二個(gè)程序集是HostCommon.dll,它提供了主程序和插件之間進(jìn)行通信所需的所有類型定義。比如,IPlug接口就是在 HostCommon.dll里面配置的,這樣它可以被主程序和插件等價(jià)的訪問(wèn)。這兩個(gè)程序集在一個(gè)文件夾內(nèi),同樣的,附加的作為插件的程序集也需要被配置在一起。那些程序集被配置在plugs文件夾內(nèi)(主程序目錄的一個(gè)子文件夾)。C# EmployeePlug類在Employee.plug 程序集中定義,而CustomerPlug類在Customer.plug程序集中定義。這個(gè)例子指定插件文件以.plug為擴(kuò)展名。事實(shí)上這些插件就是個(gè)普通的.NET類庫(kù)文件,只是通常庫(kù)文件使用.dll擴(kuò)展名,這里用.plug罷了。特殊的擴(kuò)展名對(duì)于程序運(yùn)行是完全沒(méi)有影響的,但是它可以讓用戶更明確的知道這是個(gè)插件文件。
【編輯推薦】