国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

C#中的接口

2019-11-18 16:55:17
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

接口的定義

接口與抽象類(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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 瑞昌市| 柘城县| 武邑县| 新密市| 吴江市| 洪泽县| 临桂县| 香河县| 浏阳市| 定兴县| 大石桥市| 高陵县| 洪湖市| 商南县| 凉城县| 尚义县| 拉萨市| 田阳县| 宜都市| 温宿县| 洪雅县| 铜山县| 仪陇县| 循化| 乳山市| 峨边| 嘉善县| 那曲县| 那坡县| 兴宁市| 蒲城县| 沁水县| 涡阳县| 南漳县| 长海县| 兰西县| 宁都县| 玉门市| 秀山| 肇州县| 逊克县|