接口学习心得(Interface)

摘要:
今天,我读了几篇关于接口的文章。我突然觉得我一直误解他们!我今天最初搜索了一些文章,以了解如何编写接口。然后我们将编写:namespaceCompareTest{classProgram{staticvoidMain{Squares1=newSquare,s2=newSquare;CompareTwoct=newCompareTwo();ct.ShowCompareResult;Console.ReadKey();}}publicclassSquare{privateintm_side;publicSquare{this.m_side=side;}publicintArea{get{returnm_side*m_side;}}}}PublicclassCompareTwo{publicvoidShowCompareResult{if//为简单起见,请参见Console.WriteLine;elseConsole.WriteLine;}}但如果书写更一般,这两个形状不必是正方形。事实上,您可以使用泛型传递对象。换句话说,接口是在设计类的方法时定义的。我们应该设计一个接口。接口必须具有Area属性才能进行比较。
今天看了几篇接口的文章,看着看着,忽然有种感觉,我一直都理解错了!

我本来今天搜索文章的目的,是想查找一下,如何编写一个接口。可是看了几篇文章后,我发现,其实我这个问题的提出,就说明了我没有理解接口的用途。实际上,要明白接口,要先弄明白为什么要编写接口

我们要编写接口,是因为我们要编写的方法需要使用接口。我们编写接口的目的,是为了定制一种规范,如果用户写的类满足这种规范,那么这个类的实例,就可以被我们写的方法所调用。以此来实现代码的通用性。

看不明白没关系,往下看,下面的例子就是为了弄明白上面这段蓝字的。


现在我们需要做一个类,这个类可以比较两个正方形面积的大小。那么我们会这么写:

接口学习心得(Interface)第1张namespace CompareTest
接口学习心得(Interface)第2张接口学习心得(Interface)第3张
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张    
class Program
接口学习心得(Interface)第6张接口学习心得(Interface)第7张    
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张        
static void Main(string[] args)
接口学习心得(Interface)第6张接口学习心得(Interface)第7张        
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张            Square s1 
= new Square(8), s2 = new Square(9);
接口学习心得(Interface)第5张            CompareTwo ct 
= new CompareTwo();
接口学习心得(Interface)第5张            ct.ShowCompareResult(s1, s2);
接口学习心得(Interface)第5张            Console.ReadKey();
接口学习心得(Interface)第17张        }

接口学习心得(Interface)第17张    }

接口学习心得(Interface)第5张    
public class Square
接口学习心得(Interface)第6张接口学习心得(Interface)第7张    
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张        
private int m_side;
接口学习心得(Interface)第5张        
public Square(int side)
接口学习心得(Interface)第6张接口学习心得(Interface)第7张        
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张            
this.m_side = side;
接口学习心得(Interface)第17张        }

接口学习心得(Interface)第5张        
public int Area
接口学习心得(Interface)第6张接口学习心得(Interface)第7张        
接口学习心得(Interface)第4张{
接口学习心得(Interface)第6张接口学习心得(Interface)第7张            
get 接口学习心得(Interface)第4张return m_side * m_side; }
接口学习心得(Interface)第17张        }

接口学习心得(Interface)第17张    }

接口学习心得(Interface)第5张
接口学习心得(Interface)第5张    
public class CompareTwo
接口学习心得(Interface)第6张接口学习心得(Interface)第7张    
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张        
public void ShowCompareResult(Square obj1, Square obj2)
接口学习心得(Interface)第6张接口学习心得(Interface)第7张        
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张            
if (obj1.Area > obj2.Area)            //为了简单,不考虑相等的情况了
接口学习心得(Interface)第5张
                Console.WriteLine("{0}比{1}大", obj1.Area, obj2.Area);
接口学习心得(Interface)第5张            
else
接口学习心得(Interface)第5张                Console.WriteLine(
"{0}比{1}大", obj2.Area, obj1.Area);
接口学习心得(Interface)第5张
接口学习心得(Interface)第17张        }

接口学习心得(Interface)第17张    }

接口学习心得(Interface)第5张
接口学习心得(Interface)第56张}

接口学习心得(Interface)第1张



但如果写的更通用些,这两个形状就不一定非得是正方形(Square类的对象)。我们可以设计一个类,可以比较任何形状的面积。

你可能会想。这样不能用泛型吗?事实上,使用泛型可以将对象传过来。但无法使用obj1和obj2的.Area属性。因为<T>的T类型中并不一定包含.Area属性。

这个时候我们才应该考虑设计接口。也就是说,接口是在设计类的方法时定义的。任何对象,想可以被这个方法所操作,必须实现这个接口,也只需要实现这个接口,就可以被这个方法所调用。而不用再去规定具体的类名。如:正方形(Square)。

我们应该设计一个接口,接口里规定必须有Area属性,我才可以比较。然后,让别人去实现这个接口。然后,所有实现了这个接口的类的对象,都可以被我们设计的这个类的方法所比较了。我们不用去管这个实现接口的类里面还有什么其他的方法。我们不管。我们只需要知道的是,两个对象,必须都有Area属性,我才可以比较面积。至于,这个对象有没有什么其他的属性或方法,不关我的事。我比较面积,只需要使用Area属性。

OK,那么,我们修改后的程序,是这样的:


接口学习心得(Interface)第1张
接口学习心得(Interface)第1张
namespace CompareTest
接口学习心得(Interface)第2张接口学习心得(Interface)第3张
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张    
class Program
接口学习心得(Interface)第6张接口学习心得(Interface)第7张    
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张        
static void Main(string[] args)
接口学习心得(Interface)第6张接口学习心得(Interface)第7张        
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张            Square sq 
= new Square(8);
接口学习心得(Interface)第5张            Triangle tr 
= new Triangle(129);
接口学习心得(Interface)第5张
接口学习心得(Interface)第5张            CompareTwo ct 
= new CompareTwo();
接口学习心得(Interface)第5张            ct.ShowCompareResult(sq, tr);
接口学习心得(Interface)第5张            Console.ReadKey();
接口学习心得(Interface)第17张        }

接口学习心得(Interface)第17张    }

接口学习心得(Interface)第5张    
public class Square : IHasArea
接口学习心得(Interface)第6张接口学习心得(Interface)第7张    
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张        
private int m_side;
接口学习心得(Interface)第5张        
public Square(int side)
接口学习心得(Interface)第6张接口学习心得(Interface)第7张        
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张            
this.m_side = side;
接口学习心得(Interface)第17张        }

接口学习心得(Interface)第5张        
public int Area
接口学习心得(Interface)第6张接口学习心得(Interface)第7张        
接口学习心得(Interface)第4张{
接口学习心得(Interface)第6张接口学习心得(Interface)第7张            
get 接口学习心得(Interface)第4张return m_side * m_side; }
接口学习心得(Interface)第17张        }

接口学习心得(Interface)第17张    }

接口学习心得(Interface)第5张    
public class Triangle : IHasArea
接口学习心得(Interface)第6张接口学习心得(Interface)第7张    
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张        
private int m_side;
接口学习心得(Interface)第5张        
private int m_height;
接口学习心得(Interface)第5张        
public Triangle(int BottomSide, int Height)
接口学习心得(Interface)第6张接口学习心得(Interface)第7张        
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张            
this.m_side = BottomSide;
接口学习心得(Interface)第5张            
this.m_height = Height;
接口学习心得(Interface)第17张        }

接口学习心得(Interface)第5张
接口学习心得(Interface)第5张        
public void Draw()
接口学习心得(Interface)第6张接口学习心得(Interface)第7张        
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张            
//比如这儿是把这个三角形画出来的函数,就不写了
接口学习心得(Interface)第17张
        }

接口学习心得(Interface)第5张
接口学习心得(Interface)第120张接口学习心得(Interface)第121张        
IHasArea 成员#region IHasArea 成员
接口学习心得(Interface)第5张
接口学习心得(Interface)第5张        
public int Area
接口学习心得(Interface)第6张接口学习心得(Interface)第7张        
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张            
//三角形面积就是底*高/2
接口学习心得(Interface)第6张接口学习心得(Interface)第7张
            get 接口学习心得(Interface)第4张return this.m_side*this.m_height/2; }
接口学习心得(Interface)第17张        }

接口学习心得(Interface)第5张
接口学习心得(Interface)第17张        
#endregion

接口学习心得(Interface)第17张    }

接口学习心得(Interface)第5张    
public interface IHasArea
接口学习心得(Interface)第6张接口学习心得(Interface)第7张    
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张        
int Area
接口学习心得(Interface)第6张接口学习心得(Interface)第7张        
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张            
get;
接口学习心得(Interface)第17张        }

接口学习心得(Interface)第17张    }

接口学习心得(Interface)第5张
接口学习心得(Interface)第5张    
public class CompareTwo
接口学习心得(Interface)第6张接口学习心得(Interface)第7张    
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张        
public void ShowCompareResult(IHasArea obj1, IHasArea obj2)
接口学习心得(Interface)第6张接口学习心得(Interface)第7张        
接口学习心得(Interface)第4张{
接口学习心得(Interface)第5张            
if (obj1.Area > obj2.Area)            //为了简单,不考虑相等的情况了
接口学习心得(Interface)第5张
                Console.WriteLine("{0}比{1}大", obj1.Area, obj2.Area);
接口学习心得(Interface)第5张            
else
接口学习心得(Interface)第5张                Console.WriteLine(
"{0}比{1}大", obj2.Area, obj1.Area);
接口学习心得(Interface)第5张
接口学习心得(Interface)第17张        }

接口学习心得(Interface)第17张    }

接口学习心得(Interface)第5张
接口学习心得(Interface)第56张}

接口学习心得(Interface)第1张



总结一下:

接口是为了减低耦合度,只需要必要的特性就可以运算的规范。定义接口是由开发人员定义,目的是使方法调用时,可以更灵活。实现接口是由方法的使用者实现,目的是使用开发者编写的方法。

免责声明:文章转载自《接口学习心得(Interface)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Unity3D入门(二):碰撞检測数据库分库分表中间件 ShardingJDBC 源码分析 —— SQL 路由(二)之分库分表路由下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Anders谈C# 4.0:新功能和展望

刚才刚看完Anders的PDC Talk,感觉C# 4.0的变化不是很大,但是很多改动都方便了用户的使用,有些甚至当初Anders本来不愿意加入的功能最后由于用户的呼声最后还是加进去了(如 Optional Parameters),可见Anders对用户的意见还是非常重视的。稍微总结一下,C# 4.0中有下面这些功能: 1. dynamic/IDynami...

HTML5 文件处理之FileAPI简介整理

  在众多HTML5规范中,有一部分规范是跟文件处理有关的,在早期的浏览器技术中,处理小量字符串是js最擅长的处理之一。但文件处理,尤其是二进制文件处理,一直是个空白。在一些情况下,我们不得不通过Flash/ActiveX/NP插件或云端的服务器处理较为复杂或底层的数据。今天,HTML5的一系列新规范正在致力于让浏览器具备更强大的文件处理能力。 今天要介绍...

API文档管理平台

一、应用场景 在公司中,有很多开发,每个人维护的api接口是不一样的。如果有一个统一的api文档管理平台,每个开发,把自己维护的接口录入进去。 之后再开发别的功能时,不需要重复造轮子,直接调用就可以了。有新员工入职时,也可以快速上手! 关于api文档管理,网上有很多。有在线收费的,也有开源的。基于节省成本考虑,这里主要介绍2个开源工具:ShowDoc和YA...

用接口CL_GUI_FRONTEND_SERVICES弹出选择文件对话框

因为WS_FILENAME_GET已经被废弃所以使用接口CL_GUI_FRONTEND_SERVICES来实现本地文件的选择. 用接口类CL_GUI_FRONTEND_SERVICES实现的方法 CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG   EXPORTING     WINDOW...

ant design pro (十五)advanced 使用 API 文档工具

一、概述 原文地址:https://pro.ant.design/docs/api-doc-cn 在日常开发中,往往是前后端分离的,这个时候约定好一套接口标准,前后端各自独立开发,就不会被对方的技术难点给阻塞住,从而保证项目进度。 在 Ant Design Pro 中我们已经有了一套比较完善的 mock 功能,而roadhog-api-doc工具,则能够从...

java函数式编程

1.函数式接口 1.1概念:java中有且只有一个抽象方法的接口。 1.2格式: 修饰符 interface接口名称 { public abstract返回值类型 方法名称(可选参数信息); //其他非抽象方法内容 } //或者 public interfaceMyFunctionalInterface { voidmyMethod(); }...