接口把一組公共方法和屬性組合起來 ,以封裝特定功能的一個集合。通過類可以實現接口,這樣類就支持接口所有的屬性和方法。
接口只能對方法和屬性進行定義,不能實現,只能由支持它的類實現。接口中的成員不能用訪問符修飾,如public,private,它的成員默認為public
定義接口比較簡 單
public interface IMyinterface
{
void DOSomething();//方法成員
int MyAttribute//屬性成員
{
get;//這裡只能定義這個屬性是否為只讀
set;
}
}
接口和抽象類比較相似,但一個類只能派生於一個抽象類,不過可以實現N個接口。
舉個例子來說明一下。
有兩個抽象類,car和train,,汽車和火車
下面還有許多類,比如公交車,卡車等都派生於汽車
客車,貨車都派生於火車
在car,train中公別定義了汽車與火車的一 些主要特性。
自然的,它們的派生類就擁有這樣的特性,
但是汽車下的公交車,火車下的客車都可以乘載客人,所以這兩個類可以共同實現一個擁有乘載客人功能的接口,而卡車與貨車可以共同實現一個擁有運載貨物的接口。
一個類支持一個接品,就必須實現它所有的成員
interface IMyinterface
{
void DOSomething();
void Doelsething();
}
class Myclass:IMyinterface
{
void IMyinterface.DOSomething()
{
Console.WriteLine("1");
}
public virtual void Doelsethiing()
{
Console.WriteLine("2");
}
}
class Myclass2:Myclass
{
public override void Doelsething()
{
Console.WriteLint(“3“);
}
}
上面定義了一個接口IMyinterface, Myclass實現了這個接口, 這樣,派生於Myclass的類Myclass2也就默認的支持這個接口,也繼承了對方法的實現,在Myclass2中,還可以對Doelsething方法進行重寫。
但這是有前提的。那就是Doelsething方法是由Myclass類隱式實現的。隱式實現只須匹配方法返回值和方法簽名即可。這樣的方 法,可以使用關健字vritual 和 abstract來修飾,而且可以用類的實例類調用
class obj=new Myclass();
obj.Doelsethiing();
而第一個方法DOSomething是顯式執行的。它只能由接口的引用變量來調用。而且派生類不會繼承這個方法的實現,所以上面的Myclass2類也要再加一個這個方法的實現 ,因為它繼承了Myclass,就默 認的支持這個接口。