您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“C# interface的使用方法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
C# interface使用有什么優(yōu)點呢?首先我們來比較下Java的interface因為有需求,所以需要自己封裝JavaEE的HttpServletRequest,HttpServletResponse加入更多的功能,例如封狀一些表單驗證,安全驗證,文件上傳等功能。
對于C# interface的理解首先我們來看看下面Java interface代碼。
/** *提供最基本的封裝策略,把POST GET數(shù)據(jù)分開處理 */ public interface BaseHttpRequest extends HttpServletRequest{ public String getFormString(); public String getFormParameter(String key); public String getFormParameters(String key); public String getUrlParameter(String key); public String getUrlParameters(String key); } /** * 提供安全驗證的請求策略 */ public interface SecurityHttpRequestextends HttpServletRequest{ /** * validator input stream include xss, sqlinjection or csrfthen throws exception * @throws RequestValidatorException */ public void validateRequest()throws RequestValidatorException; } /** * 提供文件上傳自動化 */ public interface FileHttpRequest extends HttpServletRequest{ /** * @return http post file mapping */ public HttpFileMap getFiles(); }
那么得要把3種不同類別的HttpRequest接口 整合起來。卻想起JAVA中接口之間因為是互相繼承,而且不能多個。這樣就麻煩了 看以下代碼是錯誤的。
public interface HttpRequest extends FileHttpRequest, SecurityHttpRequest, BaseHttpRequest{ /** * 錯誤的做法。 */ }
怎么辦呢?只能使用抽象類了
public abstract class AbstractHttpRequest implements BaseHttpRequest,SecurityHttpRequest,FileHttpRequest { }
看了吧? 當用戶需要實現(xiàn)以上統(tǒng)一的接口時候就需要繼承了這個抽象類。按照他們的功能區(qū)分為3個接口類,也是為了不要讓一個接口類非常臃腫。可能有人會問 直接寫一個類實現(xiàn)3個接口就可以啦!為什么非要把這些接口都集成為1個接口在實現(xiàn)?其實集成起來的目的就是為了對外接口的統(tǒng)一松耦合,組件內(nèi)高類聚。
例如可以這樣:
AbstractHttpRequestr=(AbstractHttpRequest)request; r.validateRequest(); r.getFiles(); r.getFormString(); ...
如果不對外統(tǒng)一,調(diào)用者就非常麻煩:
BaseHttpRequestbhr=(BaseHttpRequest)request; bhr.getFormString(); SecurityHttpRequestshr=(SecurityHttpRequest)request; shr.validateRequest(); FileHttpRequest fhr=(FileHttpRequest)request; fhr.getFiles();
以上是從設(shè)計角度為應(yīng)用者考慮。繼續(xù)回到剛剛使用抽象類來實現(xiàn)3個接口,而具體在設(shè)計實現(xiàn)類的時候,直接繼承 AbstractHttpRequest 抽象類不也就OK了嗎?其實這樣也不是理想的?,F(xiàn)在主流的開發(fā)語言Java C#等 都提倡面向接口,消除繼承,為什么?可以去看看《JAVA設(shè)計模式》但因為Java的語法原因,我們被逼使用繼承抽象類......接下來我們看看C# interface使用時是否如此考慮到這些問題。
以下是我寫的C# interface設(shè)計測試代碼。
public interface RequestSecurity : ICloneable { void validator(); } public interface RequestFormSetterGetter : ICloneable { void setForm(); } public interface RequestFileUtil : ICloneable { void getFile(); } public interface RequestAll : RequestSecurity, RequestFormSetterGetter, RequestFileUtil { } public class RequestImpl : RequestAll { public void validator() { } public void setForm() { } public void getFile() { } public object Clone() { return new object(); } }
編譯通過,總的來說,C#允許接口之間多重繼承。
“C# interface的使用方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。