C# interface使用实例分析

开发 后端
C# interface使用比Java有什么方便之处呢?具体的表现是什么呢?那么本文就向你介绍这方面的内容。

C# interface使用有什么优点呢?首先我们来比较下Java的interface因为有需求,所以需要自己封装JavaEE的HttpServletRequest,HttpServletResponse加入更多的功能,例如封状一些表单验证,安全验证,文件上传等功能。

对于C# interface的理解首先我们来看看下面Java interface代码。

  1. /**  
  2.  *提供最基本的封装策略,把POST GET数据分开处理  
  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 {  

看了吧? 当用户需要实现以上统一的接口时候就需要继承了这个抽象类。按照他们的功能区分为3个接口类,也是为了不要让一个接口类非常臃肿。可能有人会问 直接写一个类实现3个接口就可以啦!为什么非要把这些接口都集成为1个接口在实现?其实集成起来的目的就是为了对外接口的统一松耦合,组件内高类聚。

例如可以这样:

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

如果不对外统一,调用者就非常麻烦:

  1. BaseHttpRequestbhr=(BaseHttpRequest)request;  
  2. bhr.getFormString();  
  3. SecurityHttpRequestshr=(SecurityHttpRequest)request;  
  4. shr.validateRequest();  
  5. FileHttpRequest fhr=(FileHttpRequest)request;  
  6. fhr.getFiles(); 

以上是从设计角度为应用者考虑。继续回到刚刚使用抽象类来实现3个接口,而具体在设计实现类的时候,直接继承 AbstractHttpRequest 抽象类不也就OK了吗?其实这样也不是理想的。现在主流的开发语言Java C#等 都提倡面向接口,消除继承,为什么?可以去看看《JAVA设计模式》但因为Java的语法原因,我们被逼使用继承抽象类......接下来我们看看C# interface使用时是否如此考虑到这些问题。

以下是我写的C# interface设计测试代码。

  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使用的基本内容以及C# interface使用与Java的比较就向你介绍到这里,希望对你了解和学习C# interface使用有所帮助。

【编辑推荐】

  1. C# interface实例浅析
  2. C# interface编程应用浅析
  3. C#interface定义及使用浅析
  4. C#显式实现接口原理浅析
  5. C# interface学习经验浅谈
责任编辑:仲衡 来源: diybl.com
相关推荐

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-08-27 14:12:02

C# interfac

2009-09-01 09:16:57

C#使用SharpZi

2009-08-27 14:44:11

C# interfac

2009-09-14 14:25:53

C# Lambda EC# Lambda

2009-08-27 16:00:03

C#静态字段C#实例字段

2009-09-02 18:39:34

C#递归算法

2009-08-26 13:36:33

C#打印控件

2009-09-02 18:44:19

C#递归

2009-08-13 14:56:46

C#的结构体使用

2009-09-04 15:53:42

C#内存流

2009-08-17 09:39:40

C# Windows

2009-08-28 16:37:32

C# for循环

2009-08-03 10:48:21

C#日期格式到毫秒

2021-03-15 08:18:23

C#反射模块

2009-08-24 16:08:45

C# DrawStri

2009-09-01 18:29:10

C#继承C#多态

2009-08-17 17:49:20

C# 枚举
点赞
收藏

51CTO技术栈公众号