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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2. with check option能起什么作用?_面部毛孔粗大,有什么拯救的方法吗?

很多妹子都有毛孔粗大的问题,却苦恼于怎么改善,用错方法可能会刺激毛孔,但是你知道毛孔粗大的原因吗?首先,先搞清楚自己是什么类型的毛孔粗大,再对症下药。 皮脂分泌旺盛这是毛孔粗大最常见的原…

Apache Spark源码走读之4 -- DStream实时流数据处理

欢迎转载,转载请注明出处,徽沪一郎。 Spark Streaming能够对流数据进行近乎实时的速度进行数据处理。采用了不同于一般的流式数据处理模型,该模型使得Spark Streaming有非常高的处理速度,与storm相比拥有更高的吞能力。 本篇简要分…

[书目20071127]图书 时间陷阱 目录

[内容简介] 在这个快速多变和工作至上主义盛行的时代, 工作常常让我们迷失了自己的世界, 本书令人信服地告诉你,在销售领域不必玩命工作依然能取得巨大成功。 托德邓肯直击浪费我们时间、降低我们工作效能的“陷阱 ”要害, 同时&a…

antd-react-mobile(踩坑记录)

1.按照官网步骤进行, $ npm install -g create-react-app # 注意:工具会自动初始化一个脚手架并安装 React 项目的各种必要依赖,如果在过程中出现网络问题,请尝试配置代理或使用 其他 npm registry。 $ create-react-app my-app …

启动Eclipse 弹出“Failed to load the JNI shared library”错误的解决方法

原因1:eclipse的版本与jre或者jdk版本不一致 对策:要么两者都安装64位的,要么都安两个是32位一个是64位。 原因2:给定目录下jvm.dll不存在 对策:(1)重新安装jre或者jdk并配置好环境变量。&#…

路径的应用(3)

如果与MC2同级的还有一个影片剪辑MC3,则想修改MC3,的透明度,用如下方法:on(release){_parent.MC3._alpha0;}如果MC3下还有一个影片剪辑MC4,想修改MC4的透明度则用如下方法:on(release){_parent.MC3.MC4._alpha0;}转载于:https://w…

php.ini在哪里 微赞_虚拟主机php.ini在哪?怎么查看php.ini在哪

虚拟主机php.ini在哪?怎么查看php.ini在哪?相信很多人都会有这样的疑问,下面聚名网为你详解一下以上问题。虚拟主机php.ini在哪?虚拟主机php.ini文件一般放置在文件管理器的“others”文件夹中。php.ini文件控制了PHP很多方面的性…

微软私有云分享(R2)22 计算机配置文件与基础设置

计算机配置文件是完全为了裸金属安装准备的。所以如果不准备使用裸金属安装,硬件配置文件在SCVMM2012 R2中也可以不用配置。本章操作完全用图来表示(其实我准备文字了,但是貌似文字丢了…………),创建该文件没什么注意…

总结了下自己的几个典型行为

所有电器都不看说明书;尽量使用自助办理业务;使用最多的称呼是同学;喜欢玩小孩但不喜欢生小孩;拥有一种奇怪的固执;熟人面前是话癖,生人面前一言不发;认幽默感是做人的根本;认为如果…

14.PTD与的基址

0xC0300000就是页目录的基址。 随便找一个软件测试下 通过0xC0300000找到的物理页就是页目录表这个物理页即是页目录表本身也是页表页目录表是一张特殊的页表,每一项PTE指向的不是普通的物理页,而是指向其他的页表.如果我们要访问第N个PDE, 那么有如下公式:0xc03000…

多项式回归

在上一节所介绍的非线性回归分析,首先要求我们对回归方程的函数模型做出推断。尽管在一些特定的情况下我们能够比較easy地做到这一点,可是在很多实际问题上经常会令我们不知所措。依据高等数学知识我们知道,不论什么曲线能够近似地用多项式表示&#xff…

Spring - shortcuts

How to use CSS, JavaScript and Images in Spring MVC Web App https://www.udemy.com/spring-hibernate-tutorial/learn/v4/t/lecture/5608584?start0 Deploying To Tomcat using WAR files https://www.udemy.com/spring-hibernate-tutorial/learn/v4/t/lecture/5633776?s…

.net中前台javascript与后台c#函数相互调用

1.如何在JavaScript访问C#函数? 2.如何在JavaScript访问C#变量? 3.如何在C#中访问JavaScript的已有变量? 4.如何在C#中访问JavaScript函数? 问题1答案如下: javaScript函数中执行C#代码中的函数: 方法一:1、首先建立一个按钮,…

二级c语言无纸化三合一_学习攻略|计算机二级考试重点及注意事项

2020年全国计算机等级考试将于9月26日强势来袭,亲爱的你们准备好了吗?下面为大家准备了一些干货以及考试注意事项,快拿出小本本记下来吧。考试题型二级office考试题型1、选择题 20分(含公共基础知识部分10分)2、操作题 80分 (1)Word文档 30…

mongodb集群与分片的配置说明

mongodb集群与分片的配置说明 Shardingcluster介绍: 这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统。 系统分为需要三种角色: Shard Server:mongod 实例,用于存…

使用VS2005进行负载测试

下面通过一个简单的例子来讲解VS2005是如何做负载测试的.1、 编写一个加法程序,其中编写一个加法方法,然后调用该方法。//程序源代码using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using Syst…

vue项目实现列表页-详情页返回不刷新,再点其他菜单项返回刷新的需求

问题背景:有时候一些列表会有一些跳转的需求,比如跳到详情页、或者是其他相关的页面(比如跳到用户列表去查看用户的相关信息)等,此时再返回列表页,列表页会刷新重置。目前需求就是需要改成如下情况&#xf…

轮廓检测_轮廓检测| Richer Convolutional Features | CVPR | 2017

0 概述论文名称:“Richer Convolutional Features for Edge Detection”论文链接:https://openaccess.thecvf.com/content_cvpr_2017/papers/Liu_Richer_Convolutional_Features_CVPR_2017_paper.pdf缩写:RCF这一篇文论在我看来,是…

NodeJS开发环境配置

为什么80%的码农都做不了架构师?>>> 上链接~ http://www.cnblogs.com/Irving/p/3634232.html 转载于:https://my.oschina.net/weiyi/blog/287177

python各种类型转换-int,str,char,float,ord,hex,oct等

int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字符串 repr(x ) 将对象 x 转换为表达式字符串 eval(str ) 用来计算在字符串中的有效Python表达式,并返…