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


















