接口可以理解為是一種標準,在這種標準中規定了實現其的類及結構體中至少應包含的方法和屬性。在C#語言中不允許類的多繼承,這是因為傳統的多繼承帶來的問題往往勝過其帶來的好處。然而,現實世界里到處都存在著多繼承的情況。為了解決這個矛盾,在一些面向對象語言中提出了接口的概念。在C#中,通過接口可以實現多繼承的功能。
1.接口的聲明
訪問修飾符 interface 接口名稱{:基接口}
{
接口體;
}
如下面定義了一個控件的接口IControl:
interface IControl
{
void Paint();
}
與類不同,接口如果沒有指定訪問修飾符,其默認為public。接口的成員只能為方法,屬性,索引器和事件。
接口中的任何成員僅有聲明,沒有實現,而且也不能實現,因為接口僅是一種契約,這種契約需要類或結構來實現。
接口中的任何成員都是定義為公有的,指定其它的訪問修飾符,編譯時將會出錯。
2.接口的繼承
接口可以象類那樣進行繼承,但與類不同的是,接口具有多重繼承性,而類沒有。下面是兩個單繼承的例子:
interface ITextBox:IControl
{
void SetText(string txt);
}
interface IListBox:IControl
{
void SetItems(string[] items)
}
而下面是接口多重繼承的例子:
interface IComboBox:TextBox,ListBox
{
}
從上面的例子中可以看出,如果接口具有多個基接口,每個基接口之間用逗號隔開。
3.接口的實現
因為接口中的成員僅有聲明而沒有實現,這樣的話,接口本身是什么都干不了的,必須由其它內容來實現其中的聲明才會起作用。
類和結構都可以實現接口。這里僅探討類實現接口的情況。一個類可以實現一個接口,也可以實現多個接口,類要想實現接口,必須實現接口中聲明的全部成員,否則無法通過編譯。下面給出接口使用的例子:
using System;
interface Vehicle //交通工具接口
{
string Color //顏色
{
get;
set;
}
void SpeedUp(float v); //加速運行
void Stop(); //停止
}
interface Toy //玩具接口
{
void Cry(); //哭
void Laugh(); //笑
}
interface Car:Vehicle //小汽車接口,繼承于Vehicle接口
{
int Container //汽車的容量
{
get;
set;
}
}
interface Ship:Vehicle //輪船接口,繼承于Vehicle接口
{
string Type //型號
{
get;
}
}
class Titanic:Ship //定義泰坦尼克類Titanic實現Ship接口
{
string s_color; //顏色
string s_type; //型號
public Titanic(string s) //構造器
{
this.s_type = s;
}
public string Type
{
get{return s_type;}
}
public string Color //實現顏色Color屬性
{
get{return s_color;}
set{s_color = value;}
}
public void SpeedUp(float v) //實現加速運行方法
{
Console.WriteLine("泰坦尼克以{0}m/s的速度全速前進",v);
}
public void Stop() //實現停止方法
{
Console.WriteLine("泰坦尼克停下來休息!");
}
}
class ToyCar:Toy,Car //定義玩具汽車類ToyCar實現Toy和Car接口
{
string s_color; //顏色
int i_container; //容量
public string Color //實現顏色Color屬性
{
get{return s_color;}
set{s_color = value;}
}
public int Container //實現容量屬性
{
get{return i_container;}
set{i_container = value;}
}
public void SpeedUp(float v) //實現加速運行方法
{
Console.WriteLine("玩具汽車以{0}m/s的速度全速前進",v);
}
public void Stop() //實現停止方法
{
Console.WriteLine("玩具汽車停靠在旁邊!");
}
public void Cry() //實現哭Cry()方法
{
Console.WriteLine("玩具汽車哭了...(!_!)");
}
public void Laugh() //實現笑Laugh()方法
{
Console.WriteLine("玩具汽車笑了...(^_^)");
}
//類的其它方法
public void PrintInfo()
{
Console.Write("玩具汽車的顏色為:{0},",s_color);
Console.WriteLine("容量為{0}",i_container);
}
}
|
新聞熱點
疑難解答