自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C# interface使用實例分析

開發(fā) 后端
C# interface使用比Java有什么方便之處呢?具體的表現(xiàn)是什么呢?那么本文就向你介紹這方面的內(nèi)容。

C# interface使用有什么優(yōu)點呢?首先我們來比較下Java的interface因為有需求,所以需要自己封裝JavaEE的HttpServletRequest,HttpServletResponse加入更多的功能,例如封狀一些表單驗證,安全驗證,文件上傳等功能。

對于C# interface的理解首先我們來看看下面Java interface代碼。

  1. /**  
  2.  *提供最基本的封裝策略,把POST GET數(shù)據(jù)分開處理  
  3.  */ 
  4. public interface BaseHttpRequest extends HttpServletRequest{  
  5.  
  6.  public String getFormString();  
  7.  public String getFormParameter(String key);   
  8.  public String getFormParameters(String key);  
  9.  public String getUrlParameter(String key);  
  10.  public String getUrlParameters(String key);  
  11. }  
  12. /**  
  13.  * 提供安全驗證的請求策略  
  14.  */ 
  15. public interface SecurityHttpRequestextends HttpServletRequest{  
  16.  /**  
  17. * validator input stream include xss,  
  18. sqlinjection or csrfthen throws exception  
  19. * @throws RequestValidatorException  
  20. */ 
  21.  public void validateRequest()throws RequestValidatorException;  
  22. }  
  23. /**  
  24.  * 提供文件上傳自動化  
  25.  */ 
  26. public interface FileHttpRequest extends HttpServletRequest{  
  27. /**  
  28. * @return http post file mapping   
  29. */ 
  30. public HttpFileMap getFiles();  
  31. }  

那么得要把3種不同類別的HttpRequest接口 整合起來。卻想起JAVA中接口之間因為是互相繼承,而且不能多個。這樣就麻煩了 看以下代碼是錯誤的。

  1. public interface HttpRequest extends   
  2. FileHttpRequest, SecurityHttpRequest, BaseHttpRequest{  
  3.  /**  
  4. * 錯誤的做法。   
  5. */ 

怎么辦呢?只能使用抽象類了

  1. public abstract class AbstractHttpRequest   
  2. implements BaseHttpRequest,SecurityHttpRequest,FileHttpRequest {  

看了吧? 當(dāng)用戶需要實現(xiàn)以上統(tǒng)一的接口時候就需要繼承了這個抽象類。按照他們的功能區(qū)分為3個接口類,也是為了不要讓一個接口類非常臃腫??赡苡腥藭?直接寫一個類實現(xiàn)3個接口就可以啦!為什么非要把這些接口都集成為1個接口在實現(xiàn)?其實集成起來的目的就是為了對外接口的統(tǒng)一松耦合,組件內(nèi)高類聚。

例如可以這樣:

  1. AbstractHttpRequestr=(AbstractHttpRequest)request;  
  2. r.validateRequest();  
  3. r.getFiles();  
  4. r.getFormString();  
  5. ... 

如果不對外統(tǒng)一,調(diào)用者就非常麻煩:

  1. BaseHttpRequestbhr=(BaseHttpRequest)request;  
  2. bhr.getFormString();  
  3. SecurityHttpRequestshr=(SecurityHttpRequest)request;  
  4. shr.validateRequest();  
  5. FileHttpRequest fhr=(FileHttpRequest)request;  
  6. 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è)計測試代碼。

  1. public interface RequestSecurity : ICloneable  
  2. {  
  3. void validator();  
  4. }  
  5. public interface RequestFormSetterGetter : ICloneable  
  6. {  
  7. void setForm();  
  8. }  
  9. public interface RequestFileUtil : ICloneable  
  10.  {  
  11. void getFile();  
  12.  }  
  13. public interface RequestAll : RequestSecurity,   
  14. RequestFormSetterGetter, RequestFileUtil  
  15. {  
  16. }  
  17. public class RequestImpl : RequestAll  
  18.  {  
  19. public void validator()   
  20. {  
  21. }  
  22. public void setForm()  
  23. {  
  24. }  
  25. public void getFile()  
  26. {  
  27. }  
  28. public object Clone()   
  29. {  
  30. return new object();  
  31. }  

編譯通過,總的來說,C#允許接口之間多重繼承。

C# interface使用的基本內(nèi)容以及C# interface使用與Java的比較就向你介紹到這里,希望對你了解和學(xué)習(xí)C# interface使用有所幫助。

【編輯推薦】

  1. C# interface實例淺析
  2. C# interface編程應(yīng)用淺析
  3. C#interface定義及使用淺析
  4. C#顯式實現(xiàn)接口原理淺析
  5. C# interface學(xué)習(xí)經(jīng)驗淺談
責(zé)任編輯:仲衡 來源: diybl.com
相關(guān)推薦

2009-08-27 13:30:11

C# interfac

2009-08-27 17:11:44

C# Fluent I

2009-09-01 18:36:35

C#委托實例

2009-09-01 09:16:57

C#使用SharpZi

2009-08-27 14:44:11

C# interfac

2009-08-27 14:12:02

C# interfac

2009-09-14 14:25:53

C# Lambda EC# Lambda

2009-08-27 16:00:03

C#靜態(tài)字段C#實例字段

2009-09-02 18:39:34

C#遞歸算法

2009-09-02 18:44:19

C#遞歸

2009-08-13 14:56:46

C#的結(jié)構(gòu)體使用

2009-09-04 15:53:42

C#內(nèi)存流

2009-08-26 13:36:33

C#打印控件

2009-08-17 09:39:40

C# Windows

2009-08-03 10:48:21

C#日期格式到毫秒

2009-08-28 16:37:32

C# for循環(huán)

2009-08-24 16:08:45

C# DrawStri

2021-03-15 08:18:23

C#反射模塊

2009-09-01 18:29:10

C#繼承C#多態(tài)

2009-08-20 17:22:45

C# FileSyst
點贊
收藏

51CTO技術(shù)棧公眾號