W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
接口提供了一個規(guī)范而不是其成員的實現(xiàn)。
接口作為定義和實現(xiàn)之間的聯(lián)系。
接口成員都是隱式抽象的。
類或結構可以實現(xiàn)多個接口。
接口聲明就像一個類聲明,但它不為其成員提供實現(xiàn)。
這些成員將由實現(xiàn)接口的類和結構實現(xiàn)。
接口只能包含方法,屬性,事件和索引器。
下面是在System.Collections中定義的IEnumerator接口的定義:
public interface IEnumerator { bool MoveNext(); object Current { get; } void Reset(); }
接口成員總是隱式公開的,不能聲明訪問修飾符。
實現(xiàn)接口意味著為其所有成員提供公共實現(xiàn):
class Countdown : IEnumerator { int count = 11; public bool MoveNext () { return count-- > 0 ; } public object Current { get { return count; } } public void Reset() { throw new NotSupportedException(); } }
您可以將對象隱式轉換為它實現(xiàn)的任何接口。例如:
IEnumerator e = new Countdown(); while (e.MoveNext()) Console.Write (e.Current);
接口可以從其他接口派生。
例如:
public interface IUndoable { void Undo(); } public interface IRedoable : IUndoable { void Redo(); }
IRedoable
“繼承" IUndoable
的所有成員。
實現(xiàn)多個接口有時可能導致成員方法之間的沖突。
我們可以通過顯式實現(xiàn)一個接口成員來解決這種沖突。
考慮下面的例子:
interface Interface1 { void iMethod(); } interface Interface2 { int iMethod(); } public class Widget : Interface1, Interface2 { public void iMethod () { Console.WriteLine ("Widget"s implementation of Interface1.iMethod"); } int Interface2.iMethod(){ Console.WriteLine ("Widget"s implementation of Interface2.iMethod"); return 42; } }
這使得兩種方法在一個類中共存。調用顯式實現(xiàn)的成員的唯一方法是轉換到其接口:
Widget w = new Widget(); w.iMethod(); // Widget"s implementation of Interface1.iMethod ((Interface1)w).iMethod(); // Widget"s implementation of Interface1.iMethod ((Interface2)w).iMethod(); // Widget"s implementation of Interface2.iMethod
隱式實現(xiàn)的接口成員默認是封裝的。
它必須在基類中標記為virtualor或abstract以便被覆蓋。
例如:
public interface IUndoable { void Undo(); } public class DrawPad : IUndoable { public virtual void Undo() { Console.WriteLine ("DrawPad.Undo"); } } public class RichDrawPad : DrawPad { public override void Undo() { Console.WriteLine ("RichDrawPad.Undo"); } }
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: