本篇內(nèi)容主要講解“如何理解C#插件技術(shù)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“如何理解C#插件技術(shù)”吧!
創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)雞冠,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):028-86922220
C#插件技術(shù)是一種遵循統(tǒng)一的預(yù)定義接口規(guī)范編寫(xiě)出來(lái)的程序,應(yīng)用程序在運(yùn)行時(shí)通過(guò)接口規(guī)范對(duì)插件進(jìn)行調(diào)用,以擴(kuò)展應(yīng)用程序的功能。插件在英文中通常稱(chēng)為plug-in、plugin或者plug in.插件最典型的例子是Microsoft的ActiveX控件和COM(Component Object Model,部件對(duì)象模型)實(shí)際上ActiveX控件不過(guò)是一個(gè)更高繼承層次的COM而已。此外還有Photoshop的濾鏡(Filter)也是一種比較常見(jiàn)的插件。
關(guān)于ActiveX和COM在Microsoft的。Net Framework 推出的之前(大約是2003年之前吧),ActiveX控件和COM可是炙手可熱的技術(shù)??!在那個(gè)年代,一個(gè)***的VC++高手的標(biāo)志是什么?是會(huì)COM編程!不知道IUnkonw接口和QueryInterface函數(shù),你怎么可能通過(guò)Microsoft的MCSD認(rèn)證考試?
現(xiàn)在當(dāng)然不同了,我曾經(jīng)見(jiàn)過(guò)不少斷言ActiveX控件和COM已經(jīng)消亡或終將消亡的文章。但是不管怎么說(shuō),個(gè)人認(rèn)為,ActiveX控件和COM代表了插件技術(shù)的***境界,通過(guò)對(duì)ActiveX控件和COM的研究,我們可以對(duì)插件有更深刻的認(rèn)識(shí)。
C#插件技術(shù)過(guò)時(shí)了嗎?
COM技術(shù)的逐漸淡出,使不少程序員產(chǎn)生了困惑:C#插件技術(shù)已經(jīng)過(guò)時(shí)了嗎?
NO!至少我不這樣認(rèn)為!畢竟,沒(méi)有了插件技術(shù),我們還有什么更好的方法為應(yīng)用程序提供運(yùn)行時(shí)的功能擴(kuò)展呢?
COM的沒(méi)落自然有其原因,例如編程實(shí)在是太復(fù)雜而難以掌握,還有就是在這個(gè)病毒和木馬肆虐的年代,其安全性也令人堪憂(yōu)。但至少我們可以看到,C#插件技術(shù)的成功應(yīng)用還是有的:比如PhotoShop的濾鏡,比如各大主流工控軟件的功能擴(kuò)展。
關(guān)于ActiveX控件和COM技術(shù)的詳細(xì)介紹,有興趣的朋友不妨去“Google”,相信能夠獲得很多相關(guān)信息的。
對(duì)于插件的理解,我們應(yīng)該注意以下幾點(diǎn):一、插件是遵循統(tǒng)一的預(yù)定義接口規(guī)范編寫(xiě)的。
下面我以微軟的ActiveX Control Test Container為大家解釋一下插件的接口定義。
1、打開(kāi)VS.NET 2005;
2、點(diǎn)擊主菜單的“工具”菜單;
3、如果在“工具”菜單中未找到“Activex Test Container”,則點(diǎn)擊“工具”-〉“外部工具”,在“外部工具”對(duì)話(huà)框的“菜單內(nèi)容”列表框中,選中“Activex Test Container",然后點(diǎn)擊右上角的"添加”按鈕,再點(diǎn)擊左下角的“確定按鈕”,此步驟將在在“工具”菜單中添加“Activex Test Container”菜單項(xiàng);
4、點(diǎn)擊主菜單的“工具->Activex Test Container”菜單項(xiàng),運(yùn)行“Activex Test Container" ;
5、在“Activex Test Container”程序中點(diǎn)擊“編輯->插入新控件”菜單;
6、在“插入控件”對(duì)話(huà)框中找到“日歷控件 11.0" 控件,點(diǎn)擊確定;
7、點(diǎn)擊“控件”-〉“調(diào)用”方法,彈出“調(diào)用方法”對(duì)話(huà)框,按下圖所示的方法將日歷控件的背景色設(shè)置為紅色;
在這里,“BackColor”是一個(gè)預(yù)定義的通用的Activex控件接口函數(shù),用于設(shè)置控件的背景顏色。
應(yīng)用程序是在運(yùn)行時(shí)調(diào)用插件以實(shí)現(xiàn)功能擴(kuò)展的
插件最吸引人的地方當(dāng)然就是其所實(shí)現(xiàn)“運(yùn)行時(shí)(run-time)"功能擴(kuò)展。這意味著軟件開(kāi)發(fā)者可以通過(guò)公布插件的預(yù)定義接口規(guī)范,從而允許第三方的軟件開(kāi)發(fā)者通過(guò)開(kāi)發(fā)插件對(duì)軟件的功能進(jìn)行擴(kuò)展,而無(wú)需對(duì)整個(gè)程序代碼進(jìn)行重新編譯。
運(yùn)行時(shí)(run-time)是相對(duì)于編譯時(shí)(assembly-time)而言的。一般來(lái)說(shuō),軟件開(kāi)發(fā)者對(duì)軟件功能更新時(shí),是在源代碼級(jí)別進(jìn)行更新,然后對(duì)整個(gè)程序進(jìn)行重新編譯,進(jìn)而發(fā)布應(yīng)用程序的新版本,這就是編譯時(shí)(assembly-time)的軟件更新。
C#插件技術(shù)的優(yōu)缺點(diǎn)
運(yùn)行時(shí)的軟件功能擴(kuò)展其優(yōu)點(diǎn)是顯而易見(jiàn)的:
1、對(duì)軟件的開(kāi)發(fā)者而言,只需對(duì)主程序和某些常用插件進(jìn)行更新和維護(hù),然后通過(guò)公布插件接口吸引第三方的軟件開(kāi)發(fā)者對(duì)主程序的功能進(jìn)行擴(kuò)展,這是一種“我為人人,人人為我”的雙贏策略;
2、對(duì)最終用戶(hù)而言,可以通過(guò)有選擇地購(gòu)買(mǎi)第三方提供的插件實(shí)現(xiàn)自己所需要的功能,從而實(shí)現(xiàn)***性?xún)r(jià)比組合,以節(jié)省不必要的開(kāi)支。
但是,運(yùn)行時(shí)的軟件功能擴(kuò)展也有其弊端:
1、為實(shí)現(xiàn)運(yùn)行時(shí)的軟件擴(kuò)展,程序開(kāi)發(fā)者必須編寫(xiě)更多、更復(fù)雜的代碼,從而會(huì)對(duì)程序的執(zhí)行效率產(chǎn)生一定的影響。關(guān)于這一點(diǎn),我會(huì)在第二講中詳細(xì)論述;
2、由于插件是在運(yùn)行時(shí)加載的,因此第三方插件可能對(duì)用戶(hù)造成危害。這種危害通??梢苑譃閮深?lèi):
1)由于插件開(kāi)發(fā)者的技術(shù)水平原因?qū)е碌牟寮﨎UG,這種BUG可能導(dǎo)致內(nèi)存泄露、死機(jī)、數(shù)據(jù)丟失等等故障,從而影響到用戶(hù)對(duì)軟件的使用;
2)插件開(kāi)發(fā)者惡意開(kāi)發(fā)類(lèi)似于病毒和木馬的插件,竊取或毀壞用戶(hù)數(shù)據(jù),使用戶(hù)遭受不必要的損失;
為了避免此類(lèi)缺點(diǎn),軟件開(kāi)發(fā)者可能需要付出額外的代價(jià),如需要對(duì)第三方插件進(jìn)行檢驗(yàn)和認(rèn)證,或者干脆不對(duì)外提供插件開(kāi)發(fā)接口,僅由自己提供插件。
到此,相信大家對(duì)“如何理解C#插件技術(shù)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!