接口可以理解为是一种标准,在这种标准中规定了实现其的类及结构体中至少应包含的方法和属性。在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);
}
}
新闻热点
疑难解答