C#接口特性和多接口實現
C#接口特性和多接口實現
接口
關鍵字: interface
使用目的:抽象類所擁有的共性,也可以概括爲:爲了多態。
特點:
1.接口中只能包含方法。(方法、屬性、索引器、事件)
2.接口中的方法不能有任何實現
3.接口中的成員不能有任何訪問修飾符(哪怕是public)
4.接口不能被實例化
5.實現接口的類,必須實現接口的所有成員(這裏跟抽象類一樣)
6.類不能多繼承,所以在某些情況下,只能用接口來代替。
接口可以多實現(一個類可以繼承多個接口,而只能繼承一個類)
7.接口的主要目的就是爲了實現多態
8.當一個類,同時繼承了某個類,並且也實現了某些接口的時候,
必須要將繼承的類寫在第一個(如果一個類同時繼承了父類和接口的時候,要把父類寫在最前面)
9.當多個類,都具有某個或某幾個功能時(方法),但是這幾個類型又不屬於相同的系列
(這幾個類型沒有共同的父類,就不能用抽象類。),所以這時,爲了實現多態就可以
考慮把這幾個類型共有的方法提取到一個接口中,讓這幾個類型
分別實現該接口
10.當父類實現接口,子類繼承父類。那麼 接口就可以引用子類
11.不要在一個接口中寫過多的方法,避免造成接口污染。可編寫多個接口,在每個接口中,
分別定義方法
12.實現接口方法的時候,不要有override關鍵字,直接跟平常定義一樣
13.接口方法的顯示實現,如果多個接口裏有相同的方法名。那麼第一個方法
名默認的引用的是排在最前面的接口,如果要使用後面接口的方法,
就要顯示實現:接口名.方法名。訪問修飾符是private
這裏說明有一點就是第13條的說明:
eg:接口實現例子
//定義兩個接口:
public interfaceEsSdkInterface
{
string
init(string strIp,
int nPort);
string
pdfSign(string strName,
string strFilePath, bool bIsDefault);
string
CreateAccount(string strAccocunt,
string strPwd);
}
public
interface EsSdkOuterInterface
{
//給接口中方法pdfSign和EsSdkInterface接口中具有相同的方法名和參數
string
pdfSign(string strName,
string strFilePath, bool bIsDefault);
string
CreateOuterAccount(string strAccocunt,
string strPwd);
}
//創建工廠類:
public
class EsSdkFactory
{
//在同一個工廠類中實例接口
private
static EsSdkInterface INSTANCE =
new EsSdkInterfaceImpl();
private
static EsSdkOuterInterface INSTACNE_OUTER =newEsSdkOuterInterfaceImpl)();
public
static EsSdkInterface
GetInstance()
{
return
INSTANCE;
}
public
static EsSdkOuterInterface
GetInstanceOuter()
{
return
INSTACNE_OUTER;
}
}
//接口實現類
public
class EsSdkInterfaceImpl :
EsSdkInterface,
EsSdkOuterInterface
{
public
string init(string strIp,int nPort);
public
string pdfSign(string strName,string strFilePath,bool bIsDefault);
public
string CreateAccount(string strAccocunt,string strPwd);
}
這時候,EsSdkOuterInterfaceImpl類會報錯,說不能實現接口EsSdkOuterInterface的方法,因爲是不可見的。
那麼爲什麼呢?
主要原因就是上面的說的第13條的接口特性,所決定的。此時接口EsSdkOuterInterface中的方法都是private權限的。
所以對外是不可見的。如果要實現就要顯示的加上接口名.方法名。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.