VR開發(fā)入門教程30:控制臺編程 接口和索引器
來源:
奇酷教育 發(fā)表于:
接口在構(gòu)建問題的類過程中,我們經(jīng)常會遇到一種特殊的情況,在描述某個類的各個方法時,對每個方法我們只能給出其功能實現(xiàn)的要求(原形聲明
接口
在構(gòu)建問題的類過程中,我們經(jīng)常會遇到一種特殊的情況,在描述某個類的各個方法時,對每個方法我們只能給出其功能實現(xiàn)的要求(原形聲明)但不能給出具體的功能實現(xiàn)(函數(shù)定義體)。因為我們所處理的問題只是一個泛泛的功能說明,并沒有針對某一具體類型的問題來說明。
含義:
一組只有成員方法聲明沒有方法體的方法集。
接口定義了一組成員函數(shù),但沒有具體加以實現(xiàn),其實現(xiàn)則是由實現(xiàn)該接口的類來加以具體完成的。
接口中只能包含方法、屬性、索引器和事件的聲明。
接口的定義
要點:類似于類的定義格式,只是以 interface作為定義符。
格式:
[訪問修飾符] interface 接口名
{
返回值類型 方法名([參數(shù)列表]);(只有聲明而無方法體)
}
或:
[訪問修飾符] interface 派生的接口名 : 父接口名列表
{
返回值類型 方法名([參數(shù)列表]);(只有聲明而無方法體)
}
接口中聲明的方法都是默認(rèn)public的 不能自定義訪問級別
接口中聲明索引器的方法:
返回值類型 this [【參數(shù)列表】最少有一個參數(shù)]{set;get;}
示例:
public interface Dispaly
{
void ViewImage();
}
接口實現(xiàn)
通過定義一個類同時采用:來指明所實現(xiàn)的接口名,并在該類中實現(xiàn)接口中的所有成員方法且給出方法體定義。
類中所實現(xiàn)的接口中的成員函數(shù)的原型都應(yīng)該與它在 接口中的原型定義保持一致;
并在類中重寫接口中的所有成員方法;
通過實現(xiàn)接口,從而可擴充或增加該類的功能。
接口只定義方法名,而類實現(xiàn)接口內(nèi)部的方法的代碼
語法:
class 類名 : 接口列表(,分割)
{
// 所有接口定義方法的實現(xiàn)
}
一個類可以實現(xiàn)多個接口
接口的實現(xiàn)分為:隱式實現(xiàn)和顯式實現(xiàn)。
如果類或者結(jié)構(gòu)要實現(xiàn)的是單個接口,可以使用隱式實現(xiàn)
如果類或者結(jié)構(gòu)實現(xiàn)了多個接口那么接口中相同名稱成員就要顯式實現(xiàn)。
顯式實現(xiàn)是通過使用接口的完全限定名(接口名.方法名)來實現(xiàn)接口成員的。
接口回調(diào)
接口也是引用數(shù)據(jù)類型,指向接口的引用也可以指向任意實現(xiàn)了該接口的類創(chuàng)建的實例
接口回調(diào),即接口的引用可以指向?qū)崿F(xiàn)了接口的類的實例
接口回調(diào)均可以訪問到實現(xiàn)類里實現(xiàn)的方法
注意:
顯式實現(xiàn)的方法只能用接口回調(diào)來調(diào)用到
無法用實現(xiàn)類引用調(diào)用到
示例:
public interface IHello
{
void Bellow();
}
///
/// 顯式接口實現(xiàn)
///
public class Speak : IHello
{
void IHello.Bellow()
{
Console.WriteLine("Hello");
}
}
class MainClass
{
public static void Main (string[] args)
{
Speak speak = new Speak();
//speak.Bellow() error
(speak as IHello).Bellow();// 不安全 原因:無法保證待轉(zhuǎn)換的對象所在的類確實實
現(xiàn)了該接口 有可能出現(xiàn)空指針異常
IHello ih = speak as IHello;
if (ih != null)
{
ih.Bellow();//安全
}
}
}