基于C#的接口基礎(chǔ)教程之五(6)_.Net教程
推薦:基于C#的接口基礎(chǔ)教程之四 第四節(jié)、訪問接口 對接口成員的訪問 對接口方法的調(diào)用和采用索引指示器訪問的規(guī)則與類中的情況也是相同的。如果底層成員的命名與繼承而來的高層成員一致,那么底層成員將覆蓋同
那么,對于一個接口成員,怎樣確定由哪一個類的成員來實(shí)現(xiàn)呢?即一個接口成員映射的是哪一個類的成員?在這里,我們敘述一下接口映射的過程。假設(shè)類C實(shí)現(xiàn)了一個接口IInterface,Member是接口IInterface中的一個成員,在定位由誰來實(shí)現(xiàn)接口成員Member,即Member的映射過程是這樣的:
1、如果C中存在著一個顯式接口成員執(zhí)行體,該執(zhí)行體與接口IInterface 及其成員Member相對應(yīng),則由它來實(shí)現(xiàn)Member 成員。
2、如果條件(1)不滿足,且C中存在著一個非靜態(tài)的公有成員,該成員與接口成員Member相對應(yīng),則由它來實(shí)現(xiàn)Member 成員。
3、如果上述條件仍不滿足,則在類C定義的基類列表中尋找一個C 的基類D,用D來代替C。
4、重復(fù)步驟1-- 3 ,遍歷C的所有直接基類和非直接基類,直到找到一個滿足條件的類的成員。
5、如果仍然沒有找到,則報告錯誤。
下面是一個調(diào)用基類方法來實(shí)現(xiàn)接口成員的例子。類Class2 實(shí)現(xiàn)了接口Interface1,類Class2 的基類Class1 的成員也參與了接口的映射,也就是說類Class2 在對接口Interface1進(jìn)行實(shí)現(xiàn)時,使用了類Class1提供的成員方法F來實(shí)現(xiàn)接口Interface1的成員方法F:
interface Interface1 {
void F( ) ;
}
class Class1 {
public void F( ) { }
public void G( ) { }
}
class Class2: Class1, Interface1 {
new public void G( ) {}
}
注意:接口的成員包括它自己定義的成員,而且包括該接口所有父接口定義的成員。在接口映射時,不僅要對接口定義體中顯式定義的所有成員進(jìn)行映射,而且要對隱式地從父接口那里繼承來的所有接口成員進(jìn)行映射。
在進(jìn)行接口映射時,還要注意下面兩點(diǎn):
1、在決定由類中的哪個成員來實(shí)現(xiàn)接口成員時,類中顯式說明的接口成員比其它成員優(yōu)先實(shí)現(xiàn)。
2、使用Private、protected和static修飾符的成員不能參與實(shí)現(xiàn)接口映射。例如:
interface ICloneable {
object Clone( ) ;
}
class C: ICloneable {
object ICloneable.Clone( ) {…}
public object Clone( ) {…}
}
例子中成員ICloneable.Clone 稱為接口ICloneable 的成員Clone 的實(shí)現(xiàn)者,因?yàn)樗秋@式說明的接口成員,比其它成員有著更高的優(yōu)先權(quán)。
如果一個類實(shí)現(xiàn)了兩個或兩個以上名字、類型和參數(shù)類型都相同的接口,那么類中的一個成員就可能實(shí)現(xiàn)所有這些接口成員:
interface IControl {
void Paint( ) ;
}
interface IForm {
void Paint( ) ;
}
class Page: IControl, IForm {
public void Paint( ) {…}
}
這里,接口IControl和IForm的方法Paint都映射到了類Page中的Paint方法。當(dāng)然也可以分別用顯式的接口成員分別實(shí)現(xiàn)這兩個方法:
interface IControl {
void Paint( ) ;
}
interface IForm {
void Paint( ) ;
}
class Page: IControl, IForm {
public void IControl.Paint( ) {
//具體的接口實(shí)現(xiàn)代碼
}
public void IForm.Paint( ) {
//具體的接口實(shí)現(xiàn)代碼
}
}
分享:基于C#的接口基礎(chǔ)教程之三 第三節(jié) 定義接口成員 接口可以包含一個和多個成員,這些成員可以是方法、屬性、索引指示器和事件,但不能是常量、域、操作符、構(gòu)造函數(shù)或析構(gòu)函數(shù),而且不能包含任何靜態(tài)成員。接口定
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(連接字符串的配置及獲取)
- asp.net頁面?zhèn)髦禍y試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實(shí)現(xiàn)分頁示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- asp.net文字轉(zhuǎn)成圖片
- asp.net中倒計時自動跳轉(zhuǎn)頁面的實(shí)現(xiàn)方法(使用javascript)
- ASP.NET程序設(shè)計的10大技巧
- c#自定義控件中事件的處理
- Asp.net 中將漢字轉(zhuǎn)換成拼音的方法
- VS2010、VS2008等項(xiàng)目的默認(rèn)瀏覽器修改方法(圖文)
- ASP.NET筆記之 ListView 與 DropDownList的使用
- 基于.NET平臺的分層架構(gòu)實(shí)戰(zhàn)(二)需求分析與數(shù)據(jù)庫設(shè)計
- asp.net中使用repeater和PageDataSource搭配實(shí)現(xiàn)分頁代碼
- 揭秘ASP.NET常用的26個優(yōu)化性能方法
- 相關(guān)鏈接:
- 教程說明:
.Net教程-基于C#的接口基礎(chǔ)教程之五(6)
。