接口是C#的一种类型,是对象和使用者之间的约定(contract)。它只包含方法和属性的声明,不能有数据成员和任何实现。如:

interface IShape
{
    double X { get; set; }
    double Y { get; set; }
    void Draw();
}

.NET Framework通常用大写字母"I"作为接口名字的第一个字符。如果接口只定义了一个主要方法(如上例),则可用"...able"作为接口名字的后缀。如上例可命名为IDrawable.

实现接口的类需要继承它,并实现所有的方法和属性。如:

class Square : IShape
{
    private double _mX, _mY;

    public void Draw() { ... }

    public double X 
    { 
        set { _mX = value; }
        get { return _mX; }  
    }

    public double Y 
    {
        set { _mY = value; }
        get { return _mY; }
    }
}

类可以同时继承多个接口:

class MyClass : Class1, Interface1, Interface2 { ... }

对象可以用接口作为其引用:

class MyClass 
{
    static void Main()
    {
        IShape shape = new Square();
        shape.Draw();
    }
}

接口可以继承其他接口,但不能从类继承:

interface IRotateable
{
    void Rotate(double theta);
}

interface IDrawable : IRotateable
{
    void Draw();
}

额外细节

编辑

接口的成员都是public。

实现类可以把接口的方法定义为虚方法。

接口没有静态方法。

接口可以声明事件和索引器(indexer)。

For those familiar with Java, C#'s interfaces are extremely similar to Java's.