一 接口
接口(interface)实际上是一个约定。
如:ICloneable,IComparable;
接口是抽象成员的集合;
ICIonable含有方法clone();
IComparable含有方法compare();
接口是一个引用类型,比抽象类更抽象。
帮助实现多重继承
二 接口的用处
1 实现不相关的相同行为
不需要考虑这些类之间的层次关系;
2 通过接口可以了解对象的交互界面,而不需了解对象所对应的类
例如:
public sealed class String:IComparable,ICloneable,
IConvertible,IEnumerable
三 定义有一个接口
public interface IStringList
{
void Add(string s);
int Count{get;}
string this[int index]{get;set}
}
注:
public abstract 这两个关键词不写出来。
1 实现接口
class 类名:[父类,]接口,接口,....,接口
{
public 方法(){.....}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 接口
{
interface Runner
{
void run();
}
interface Swimmer
{
void swim();
}
abstract class Animal
{
abstract public void eat();
}
class Person:Animal,Runner,Swimmer
{
public void run()
{
Console.WriteLine("run");
}
public void swim()
{
Console.WriteLine("swim");
}
public override void eat()
{
Console.WriteLine("eat");
}
public void speak()
{
Console.WriteLine("speak");
}
}
class TestInterface
{
static void m1(Runner r)
{
r.run();
}
static void m2(Swimmer s)
{
s.swim();
}
static void m3(Animal a)
{
a.eat();
}
static void m4(Person p)
{
p.speak();
}
public static void Main(string[] args)
{
Person p = new Person();
m1(p);
m2(p);
m3(p);
m4(p);
Runner a = new Person();
a.run();
Console.ReadKey();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 显示成员接口实现
{
class InterfaceExplicitImpl
{
static void Main()
{
FileViewer f = new FileViewer();
f.Test();
((IWindow)f).Close();
IWindow w = new FileViewer();
w.Close();
Console.ReadKey();
}
}
interface IWindow
{
void Close();
}
interface IFileHandler
{
void Close();
}
class FileViewer:IWindow,IFileHandler
{
void IWindow.Close()
{
Console.WriteLine("Window Closed");
}
void IFileHandler.Close()
{
Console.WriteLine("File Closed");
}
public void Test()
{
( (IWindow)this).Close();
}
}
}
总结:
接口是一种约定;
接口中有多个抽象方法;
接口能实现多继承;
面向接口进行编程;