c#不支持多继承,所以引入接口,下面谈谈接口的特点
/*接口:定义用 interface 接口名 { 返回类型 方法名(参数);}
* 接口中方法不能有访问修饰符,默认为共有* 在接口中可以定义属性、事件、索引器、方法
* 不可以定义:字段,运算符重载,实例构造函数,析构函数
* 接口不能使用static关键字
*
* 1、 接口可以理解为对一组方法声明的统一命名,但这些方法没有实现,
* 继承于该接口的类必须实现接口中的方法
* 显示实现接口
* 1、方法不能使用任何访问修饰符,默认为私有
* 2、由于显示实现的成员默认为私有,所以对象不能调用,需要转换为对应的接口
* 3、实现多个接口时,推荐使用显示的方式
* 接口与抽象类
* 1、抽象类使用abstract关键字 接口使用interface
* 2、都不能实例化成员
* 3、抽象类可以包含虚方法、非抽象方法、静态成员
* 4、接口不能包含虚方法和任何静态成员,接口只能定义方法,不能实现方法
* 5、抽象类不能实现多继承,接口支持多继承
*
*/
下面是继承一个接口的例子,可以用对象调用接口中的方法,
using System;
namespace 接口
{
interface ICustomCompare
{
int compareTo(object obj);//接口里的方法是共有的
}
public class Person:ICustomCompare
{
private int age;
public int Age
{
set{ age = value;}
get{ return age;}
}
public int compareTo(object obj)//必须用public
{
Person p = (Person)obj;
if (this.age > p.age) {
return 1;
} else if(this.age < p.age)
{
return -1;
}else{
return 0;
}
}
}
class MainClass
{
public static void Main (string[] args)
{
Person p1 = new Person ();
p1.Age = 18;
Person p2 = new Person ();
p2.Age = 19;
if (p1.compareTo (p2) == -1) {
Console.WriteLine ("big");
} else if (p1.compareTo (p2) == 1) {
Console.WriteLine ("small");
} else {
Console.WriteLine ("equal");
}
}
}
}
下面是一个继承多个接口的例子,注意实现接口和调用接口的方法不同
using System;
namespace 接口
{
interface IChineseFreeting
{
void sayHello();
}
interface IAmericanGreeting
{
void sayHello();
}
class Speaker:IChineseFreeting,IAmericanGreeting
{
void IChineseFreeting.sayHello()//用接口名.方法名
{
Console.WriteLine ("你好");
}
void IAmericanGreeting.sayHello()
{
Console.WriteLine ("hello");
}
}
class MainClass
{
public static void Main (string[] args)
{
Speaker s = new Speaker ();
IAmericanGreeting ame = (IAmericanGreeting)s;
ame.sayHello ();
}
}
}