接口定义
使用interface关键字定义接口(而类是用关键字class定义)。在接口中,要按照与在类中一样的方式声明方法,只是不允许制定任何访问修饰符。接口中的方法是没有实现的。实现接口的类必须实现接口中所有的方法。
接口的例子:
class IActivity{
void eat();
void walk();
void sleep();
}
实现接口:
class Cat : IActivity
{
public void eat()
{
Console.WriteLine("A cat is eating");
}
public void walk()
{
Console.WriteLine("A cat is walking");
}
public void sleep()
{
Console.WriteLine("A cat is sleeping");
}
}
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
cat.eat();//output:A cat is eating
cat.walk();//output:A cat is walking
cat.sleep();//output:A cat is sleeping
}
}
实现多个接口:
一个类最多只有一个基类,但是可以有多个接口。类必须实现这些接口的所有方法。
interface IActivity
{
void eat();
void walk();
void sleep();
}
interface IName
{
void name();
}
class Cat : IActivity,IName //实现多个接口,以“,”隔开
{
public void eat()
{
Console.WriteLine("A cat is eating");
}
public void walk()
{
Console.WriteLine("A cat is walking");
}
public void sleep()
{
Console.WriteLine("A cat is sleeping");
}
public void name()
{
Console.WriteLine("I am a cat");
}
}
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
cat.eat();//output:A cat is eating
cat.walk();//output:A cat is walking
cat.sleep();//output:A cat is sleeping
cat.name();//output:I am a cat
}
}
另一种实现:
interface IActivity
{
void eat();
void walk();
void sleep();
}
interface IName:IActivity
{ //接口之上又实现一个接口
void name();
}
class Cat :IName
{//要实现IName接口和IActivity中的所有方法
public void eat()
{
Console.WriteLine("A cat is eating");
}
public void walk()
{
Console.WriteLine("A cat is walking");
}
public void sleep()
{
Console.WriteLine("A cat is sleeping");
}
public void name()
{
Console.WriteLine("I am a cat");
}
}
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
cat.eat();//output:A cat is eating
cat.walk();//output:A cat is walking
cat.sleep();//output:A cat is sleeping
cat.name();//output:I am a cat
}
}
显示实现接口:
如果类实现的多个接口,接口中难免有同名的方法,这个时候可以通过显示实现接口解决:接口名.方法名
interface IActivity
{
void eat();
void walk();
void sleep();
}
interface IFree
{
void sleep();
}
class Cat : IActivity,IFree
{
public void eat()
{
Console.WriteLine("A cat is eating");
}
public void walk()
{
Console.WriteLine("A cat is walking");
}
void IActivity.sleep()//显示接口的实现
{
Console.WriteLine("A cat is sleeping in activity");
}
void IFree.sleep()//显示接口的实现
{
Console.WriteLine("A cat is sleeping in free");
}
}
但是显示接口实现的方法没有public标记。如果方法是显示接口实现的一部分,就不能为方法指定访问修饰符。
那么如何访问这些方法呢?通过恰当的接口引用类的对象
class Program
{//第一种写法
static void Main(string[] args)
{
Cat cat = new Cat();
(cat as IActivity).sleep();
(cat as IFree).sleep();
}
}
class Program
{//第二种写法
static void Main(string[] args)
{
Cat cat = new Cat();
IActivity activity = cat;
activity.sleep();
IFree free = cat;
free.sleep();
}
}