c#中的接口

目录

接口的定义

接口与抽象类

接口的的实现

接口的的多态性

一.接口的定义

定义:定义一个协定。实现接口的类或结构必须遵守其协定。

简单的说就是接口或者类之间交互时遵守的一个显示定义。最初接触“类与类之间通过接口交互”这个概念时,误以为接口就是类公开的方法,类之间通过类的方法进行交互。其实接口是独立于类的一个定义。接口定义类之间交互的标准。

那么类与类之间直接交互就好了,为什么还要使用接口呢?

这主要是因为:接口是类之间交互内容的一个抽象,把类之间需要交互的内容抽象出来定义成接口,可以更好的控制类之间的逻辑交互。可见接口内容的抽象好坏关系到整个程序的逻辑质量;另外可以在任何时候通过开发附加接口和实现来添加新的功能;

关于接口一个很重要的概念:接口只包含成员定义,不包含成员的实现,成员的实现需要在继承的类或者结构中实现。

接口的成员包括:方法,特性,索引器,事件。

注意:接口不包含字段。

实现接口的类必须严格按其定义来实现接口的每个方面

接口本身一旦被发布就不能再更改,对已发布的接口进行更改会破坏现有的代码。

一个典型的接口示例:

using System;

using System.Colletion;

public delegate voic Chang(object  sender,object event)//定义一个委托

public interface Ibroker  //定义一个股票经济人接口

{

string GetRating (string stock);//一个获得金额的方法(此处没有实现)

decimal pricePerTrade    //定义一个设置每股价格的特性

{

get;                //没有实现的

set;

}

decimal this(string StockName)    //定义索引器

{

get;

set;

}

event Change pricechange;   //定义接口的事件

}

二.接口与抽象类

抽象类和接口在定义上和功能上有很多相似的地方,具体在程序中使用抽象类还是接口需要比较抽象类和接口的具体差别。

抽象类:一种不能实例化而必须从中继承的类,抽象类可以提供实现,也可以不提供实现

子类只能从一个抽象类继承

抽象类应主要用于关系密切的对象

如果要设计大的功能单元,则使用抽象类。

如果预计要创建组件的多个版本,则创建抽象类

接口:是完全抽象的成员集合,不提供认识实现。

类或者结构可以继承几个接口。

接口最适合为不相关的类提供通用功能

如果要设计小而简练的功能块,则使用接口

接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口

三.接口的的实现

接口的实现分为:隐式实现和显式实现。如果类或者结构要实现的是单个接口,可以使用隐式实现,如果类或者结构继承了多个接口那么接口中相同名称成员就要显示实现。显示实现是通过使用接口的完全限定名来实现接口成员的。

针对上面的例子 我们可以这样实现接口:

public class testInterface: Ibroker  //定义一个继承ibroker接口的类

{

hashtable hash=new hashtable();

decimal pricepertrade;

public testInterface(decimal price)   // 构造函数

{

pricepertrade=price ;             //初始化字符串

}

public string  Getrating (string stock)     //隐式实现接口的方法

{

return “buy”;

}

public decimal Ibroker.pricepertrade //  显式实现接口的特性

{

get

{

return pricepertrade;

}

set

{

pricepertrade=value;

pricechange(“Finacebroker”,value);

}

public decimal this(string stockName)

{

get

{

return (decimal)Hash[stockName];

}

set

{

hash.add(stockname,value);

}

}

}

public event changer pricechange;//接口中的所有成员都要实现

}

四.接口中的多态

多个类继承了相同的接口就实现了接口的多态性,接口的多态性的访问和类的多态性访问一样。下面的例子说明怎么实现接口的多态性访问:

public class InterfaceTester

{

public stratic int Main (string[] args)

{

string recommendation;

Arraylist Brokers=new Arraylist;//定义一个列表

Brokers.add(new  firstBroker(7.21m));//添加第一个继承接口的类

Brokers.add(new  secondBroker(12.3m));// 添加第二个继承接口的类

InterfacetTester new Iftst=new InterfacetTester

Foreach (Ibroker broker in Brokers)

{

broker.pricechange+=new change(iftst.pricepertradechange);

broker[“adc”]=12.33m;

broker[“rty”]=11.23ml

broker.pricepertrade=12.55m;

}

}

}

转载于:https://www.cnblogs.com/Athrun/archive/2007/11/27/973854.html

c#中的接口的定議以及接口與抽象类的區別相关推荐

  1. i10在java中什么意思啊_Java的Integer和int有什么區別

    Java是面向對象的編程語言,一切都是對象,但是為了編程的方便還是引入了基本數據類型,為了能夠將這些基本數據類型當成對象操作,Java為每一個基本數據類型都引入了對應的包裝類型(wrapper cla ...

  2. exception java doc_在javadoc中,標簽@throws和@exception之間有什么區別?

    Take the following implementation of a array-based stack of chars for example: 以下面的基於數組的字符堆棧的實現為例: p ...

  3. 交换机中流量监管、流量整形和接口限速是如何实现的

    本文介绍交换机的流量监管.流量整形和接口限速的原理,并且介绍相关参数和配置方法. 01      相关名词解释 表1-1 简称及对应的全称 流量监管.流量整形和接口限速是通过对流量规格进行监督,以限制 ...

  4. 超详细|一篇搞定操作系统——用户接口

    文章目录 6.1 用户接口 6.2 其他特殊操作系统 6.2.1 嵌入式操作系统 6.2.2 分布式操作系统 操作系统全家桶:传送门 一.操作系统引述:https://blog.csdn.net/di ...

  5. 使用VIVADO中的MIG控制DDR3(AXI接口)三——DDR3简介

    在读写DDR3之前,需要了解DDR3的相关知识,而如果一开始就直接看DDR3的话,我们极有可能会感觉到一头雾水,不知道从哪下手,接下来,我们便从SDRAM一步步到DDR3,分步去学习相关的知识. 1 ...

  6. Java 8中一些常用的全新的函数式接口

    这一篇属于菜鸟级博客,只是介绍了一些在Java 8中新出现的一些很有用的接口,通过一些简单的例子加以说明,没有深入地阐述. 函数式接口 什么是函数式接口? 函数式接口,@FunctionalInter ...

  7. java中接口适配器实现,12.1.8 Java中的应用-AWT事件适配器(接口的适配器模式)...

    12.1.8  Java中的应用-AWT事件适配器(接口的适配器模式) 从以上的学习我们已经了解到,基于接口的适配器模式是采用抽象化接口的方式,来达到节省接口函数的目的,这一特性特别适合于Java A ...

  8. python接口测试非json的断言_荐在接口自动化测试中,如何利用Pytest + JSONPath 进行接口响应断言...

    之前有一篇文章,介绍了如何使用JSONSchema对接口响应进行断言,主要的适用场景是对响应的数据结构进行校验,保证客户端收到的数据结构稳定和合法.今天,介绍使用JSONPath对接口响应的值进行断言 ...

  9. ACID中C与CAP定理中C的区别

    转载自  ACID中C与CAP定理中C的区别 ACID和CAP定理中都有C,代表Consistent一致性,很多人容易将这两个C混为一谈,其实这两个一致性是有区别的. 事务的定义是一系列操作要么全部成 ...

最新文章

  1. Failure Groups in ASM
  2. 关于org.apache.lucene.queryParser.ParseException: Encountered 解决方法
  3. 3D 投影矩阵学习1
  4. 十分钟了解分布式计算:Spark
  5. 6s在c语言中的用法,C语言中assert的用法讲解
  6. element-ui 左侧边栏el-menu组件: 路由跳转 - 案例篇
  7. Atitit 设计模式的本质思考】
  8. 实验1 java程序基础_《Java程序设计》实验1
  9. 自动驾驶全球产业链全景图
  10. jdbc odbc连接mysql_具体说明JDBC连接数据库与ODBC连接数据的区别
  11. linux刷新解析,如何在Linux(和FreeBSD)上刷新DNS解析器缓存
  12. 【TL431】TL431精密电压调节器简介
  13. 黑客6种方法入侵你的计算机系统
  14. 缅怀过往_飘云羽逸_新浪博客
  15. 数据结构与算法教程目录
  16. 调用百度地图进行路线规划
  17. php股票指标,最精准的换手率选股法股票指标 通达信公式(附图)
  18. 软件测试用例设计时的颗粒度
  19. 《焦虑心理学》——压力感篇
  20. 《程序员养成记》第5集 学习编程的乐趣

热门文章

  1. 用移位实现除以或者乘以一个数
  2. win10虚拟内存怎么设置最好_淘宝直通车时间段怎么设置?哪个时间段开最好?...
  3. 485 九针头_张元英安宥真还是孩子,手臂还有疫苗接种痕迹,九针头太吓人
  4. python spangt_python怎么爬去spanlt;/span中间标签的内容
  5. PCA、SVD、ZCA白化理论与实现
  6. 图像相似性搜索的原理
  7. SQL on and 和 on where 的区别
  8. Java生鲜电商平台-深入订单拆单架构与实战
  9. Java生鲜电商平台-订单中心服务架构与异常订单逻辑
  10. typescript-koa-postgresql 实现一个简单的rest风格服务器 —— 连接 postgresql 数据库...