c#中的接口_c#应用

2008-02-23 05:43:58来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

接口的定义

接口和抽象类

接口的的实现

接口的的多态性

一.接口的定义

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

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

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

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

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

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

注意:接口不包含字段。

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

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

一个典型的接口示例:

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;

}

}

}

http://www.cnblogs.com/chenou/archive/2006/10/19/534080.html


标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 防sql注入攻击_c#应用

下一篇: c#中的委托和事件的简单实例_c#应用