接口简单理解就是一种约定,使得实现接口的类或结构在形式上保持一致
- 接口描述的事可属于任何类或结构的一组相关功能,它只包含方法、属性、事件或索引器的签名,而且没有相关的实现。
- 接口中的成员总是公用的,不能存在修饰符。
- 实现接口的类或结构必须实现接口定义中指定的接口成员。
- 用关键字interface来定义接口
public interface IComparable
{
int CompareTo(object obj);
}
IComparable接口的定义中仅包含了一个方法CompareTo(),并且该方法没有任何支付方及实现。如果我们定义一个类来实现了IComparable接口的话,那它就必须实现CompareTo方法。
以下为实例:
interface IPerson
{
int Age { get; set; }
string Name { get; set; }
}
interface IPrintable
{
void PrintInfo();
}
class Worker : IPerson, IPrintable
{
#region IPerson Members
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
#endregion
#region IPrintable Menbers
public void PrintInfo()
{
Console.WriteLine("=======Worker.PrintInfo=======");
Console.WriteLine("Name:{0}", name);
Console.WriteLine("Age:{0}", age);
}
#endregion
}
class Program
{
static void Main(string[] args)
{
Worker w = new Worker();
w.Name = "John";
w.Age = 20;
w.PrintInfo();
Console.ReadLine();
}
}
输出结果:

Worker类实现了两个接口:IPerson和IPrintable。它从IPerson接口获得了Age和Name。从IPrintable接口获得了PrintInfo()方法,并为这些继承的成员提供了实现。
接口是引用类型,可以将一个派生自接口的类转化为接口,并通过接口的引用来访问派生类的成员
C#中接口与C++的对比,以及使用C#接口应注意几个问题:
1、C#中的接口是独立于类来定义的。这与 C++模型是对立的,在 C++中接口实际上就是抽象基类。
2、接口和类都可以继承多个接口。
3、类可以继承一个基类,接口根本不能继承类。这种模型避免了 C++的多继承问题,C++中不同基类中的实现可能出现冲突。因此也不再需要诸如虚拟继承和显式作用域这类复杂机制。C#的简化接口模型有助于加快应用程序的开发。
4、一个接口定义一个只有抽象成员的引用类型。C#中一个接口实际所做的,仅仅只存在着方法标志,但根本就没有执行代码。这就暗示了不能实例化一个接口,只能实例化一个派生自该接口的对象。
5、接口可以定义方法、属性和索引。所以,对比一个类,接口的特殊性是:当定义一个类时,可以派生自多重接口,而你只能可以从仅有的一个类派生。