接口的定義
接口與抽象類(lèi)
接口的的實(shí)現(xiàn)
接口的的多態(tài)性
一.接口的定義
定義:定義一個(gè)協(xié)定。實(shí)現(xiàn)接口的類(lèi)或結(jié)構(gòu)必須遵守其協(xié)定。
簡(jiǎn)單的說(shuō)就是接口或者類(lèi)之間交互時(shí)遵守的一個(gè)顯示定義。最初接觸“類(lèi)與類(lèi)之間通過(guò)接口交互”這個(gè)概念時(shí),誤以為接口就是類(lèi)公開(kāi)的方法,類(lèi)之間通過(guò)類(lèi)的方法進(jìn)行交互。其實(shí)接口是獨(dú)立于類(lèi)的一個(gè)定義。接口定義類(lèi)之間交互的標(biāo)準(zhǔn)。
那么類(lèi)與類(lèi)之間直接交互就好了,為什么還要使用接口呢?
這主要是因?yàn)椋航涌谑穷?lèi)之間交互內(nèi)容的一個(gè)抽象,把類(lèi)之間需要交互的內(nèi)容抽象出來(lái)定義成接口,可以更好的控制類(lèi)之間的邏輯交互。可見(jiàn)接口內(nèi)容的抽象好壞關(guān)系到整個(gè)程序的邏輯質(zhì)量;另外可以在任何時(shí)候通過(guò)開(kāi)發(fā)附加接口和實(shí)現(xiàn)來(lái)添加新的功能;
關(guān)于接口一個(gè)很重要的概念:接口只包含成員定義,不包含成員的實(shí)現(xiàn),成員的實(shí)現(xiàn)需要在繼承的類(lèi)或者結(jié)構(gòu)中實(shí)現(xiàn)。
接口的成員包括:方法,特性,索引器,事件。
注意:接口不包含字段。
實(shí)現(xiàn)接口的類(lèi)必須嚴(yán)格按其定義來(lái)實(shí)現(xiàn)接口的每個(gè)方面
接口本身一旦被發(fā)布就不能再更改,對(duì)已發(fā)布的接口進(jìn)行更改會(huì)破壞現(xiàn)有的代碼。
一個(gè)典型的接口示例:
using System;
using System.Colletion;
public delegate voic Chang(object sender,object event)//定義一個(gè)委托
public interface Ibroker //定義一個(gè)股票經(jīng)濟(jì)人接口
{
string GetRating (string stock);//一個(gè)獲得金額的方法(此處沒(méi)有實(shí)現(xiàn))
decimal PRicePerTrade //定義一個(gè)設(shè)置每股價(jià)格的特性
{
get; //沒(méi)有實(shí)現(xiàn)的
set;
}
decimal this(string StockName) //定義索引器
{
get;
set;
}
event Change pricechange; //定義接口的事件
}
二.接口與抽象類(lèi)
抽象類(lèi)和接口在定義上和功能上有很多相似的地方,具體在程序中使用抽象類(lèi)還是接口需要比較抽象類(lèi)和接口的具體差別。
抽象類(lèi):一種不能實(shí)例化而必須從中繼承的類(lèi),抽象類(lèi)可以提供實(shí)現(xiàn),也可以不提供實(shí)現(xiàn)
子類(lèi)只能從一個(gè)抽象類(lèi)繼承
抽象類(lèi)應(yīng)主要用于關(guān)系密切的對(duì)象
如果要設(shè)計(jì)大的功能單元,則使用抽象類(lèi)。
如果預(yù)計(jì)要?jiǎng)?chuàng)建組件的多個(gè)版本,則創(chuàng)建抽象類(lèi)
接口:是完全抽象的成員集合,不提供認(rèn)識(shí)實(shí)現(xiàn)。
類(lèi)或者結(jié)構(gòu)可以繼承幾個(gè)接口。
接口最適合為不相關(guān)的類(lèi)提供通用功能
如果要設(shè)計(jì)小而簡(jiǎn)練的功能塊,則使用接口
接口一旦創(chuàng)建就不能更改。如果需要接口的新版本,必須創(chuàng)建一個(gè)全新的接口
三.接口的的實(shí)現(xiàn)
接口的實(shí)現(xiàn)分為:隱式實(shí)現(xiàn)和顯式實(shí)現(xiàn)。如果類(lèi)或者結(jié)構(gòu)要實(shí)現(xiàn)的是單個(gè)接口,可以使用隱式實(shí)現(xiàn),如果類(lèi)或者結(jié)構(gòu)繼承了多個(gè)接口那么接口中相同名稱成員就要顯示實(shí)現(xiàn)。顯示實(shí)現(xiàn)是通過(guò)使用接口的完全限定名來(lái)實(shí)現(xiàn)接口成員的。
針對(duì)上面的例子 我們可以這樣實(shí)現(xiàn)接口:
public class testInterface: Ibroker //定義一個(gè)繼承ibroker接口的類(lèi)
{
hashtable hash=new hashtable();
decimal pricepertrade;
public testInterface(decimal price) // 構(gòu)造函數(shù)
{
pricepertrade=price ; //初始化字符串
}
public string Getrating (string stock) //隱式實(shí)現(xiàn)接口的方法
{
return “buy”;
}
public decimal Ibroker.pricepertrade // 顯式實(shí)現(xiàn)接口的特性
{
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;//接口中的所有成員都要實(shí)現(xiàn)
}
四.接口中的多態(tài)
多個(gè)類(lèi)繼承了相同的接口就實(shí)現(xiàn)了接口的多態(tài)性,接口的多態(tài)性的訪問(wèn)和類(lèi)的多態(tài)性訪問(wèn)一樣。下面的例子說(shuō)明怎么實(shí)現(xiàn)接口的多態(tài)性訪問(wèn):
public class InterfaceTester
{
public stratic int Main (string[] args)
{
string recommendation;
Arraylist Brokers=new Arraylist;//定義一個(gè)列表
Brokers.add(new firstBroker(7.21m));//添加第一個(gè)繼承接口的類(lèi)
Brokers.add(new secondBroker(12.3m));// 添加第二個(gè)繼承接口的類(lèi)
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.survivalescaperooms.com/chenou/archive/2006/10/19/534080.html
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注