接口(C# 编程指南)

接口包含 结构 可以实现相关一组功能的定义。

通过使用接口,可以在选件类中,例如,包括从多个源的行为。 因为这种语言不支持选件类,多重继承该功能很重要的 c#。 此外,您必须使用接口,如果要模拟结构的继承,因为它们不能从另一个结构或选件类实际继承。

如下面的示例所示,通过使用 接口 关键字,定义一个接口。

interface IEquatable<T>
{
    bool Equals(T obj);
}

实现 IEquatable<T> 接口的所有选件类或结构必须包含与签名由接口指定的 Equals 方法的定义。 因此,您中的选件类可以实现计数包含选件类实例可以确定的 Equals 方法的 IEquatable<T> 它是否与同一类的另一个实例是否相等。

IEquatable<T> 的定义。Equals不提供实现。 接口只定义签名。 在这样,在 c# 中的接口类似于任何方法是抽象的抽象类。 但是,选件类或结构可以实现多个接口,但是,选件类可以继承唯一选件类,摘要。 因此,通过使用接口,该接口,可以在选件类可以包括从多个源的行为。

有关抽象类的更多信息,请参见 抽象以及密封选件类和选件类成员

接口可以包含方法、属性、事件、索引器,或者这四个成员类型的任意组合。 有关示例的链接,请参见 相关章节。 接口不能包含常数、字段、运算符、实例构造函数、析构函数或类型。 接口成员将自动是公共的,因此,它们不会包含任何访问修饰符。 成员也不能是 静态

若要实现接口成员,实现的选件类的相应成员必须是公共的,非静态的,并且具有名称和签名和接口成员相同。

当选件类或结构实现接口时,选件类或结构必须提供接口定义的任何成员提供实现。 接口不提供选件类或结构可以继承方式与它能继承基类功能。 但是,因此,如果基类实现接口,从基类派生的任何选件类继承实现。

下面的示例演示 IEquatable<T> 接口的实现。 实现的选件类,Car,必须提供 Equals 方法的实现。

public class Car : IEquatable<Car>
{
    public string Make {get; set;}
    public string Model { get; set; }
    public string Year { get; set; }

    // Implementation of IEquatable<T> interface
    public bool Equals(Car car)
    {
        if (this.Make == car.Make &&
            this.Model == car.Model &&
            this.Year == car.Year)
        {
            return true;
        }
        else
            return false;
    }
}

选件类的属性和索引可以定义接口中定义的属性或索引器的额外访问器。 例如,接口可能声明具有 获取 访问器的属性。 实现接口的选件类可以声明 get 和 设置 访问器的相同的属性。 但是,如果属性或索引器使用显式实现,则访问器必须匹配。 有关显式实现的更多信息,请参见 显式接口实现(C# 编程指南)接口属性(C# 编程指南)"。

接口可以实现接口。 选件类可能包括接口多次通过从继承的基类或通过其他接口实现的接口。 但是,选件类可以提供接口的实现只一次,因此,只有 + 当选件类将接口声明为选件类的一部分 (class ClassName : InterfaceName) 的定义。 如果接口继承,因为您继承的实现接口的基类,基类提供接口的成员的实现。 但是,派生类中重新实现接口成员 (而不是使用已继承的实现。

使用虚拟成员,基类也可以实现接口成员。 在这种情况下,派生类可以通过重写虚拟成员来更改接口行为。 有关虚拟成员的更多信息,请参见多态性

摘要的接口

接口具有下列属性:

  • 接口与抽象基类。 实现接口的任何选件类或结构必须实现其所有成员的链接。

  • 接口不能直接实例化。 其成员通过实现接口的任何选件类或结构实现。

  • 接口可以包含事件、索引器、方法和属性。

  • 接口不包含方法的实现。

  • 选件类或结构可以实现多个接口。 选件类可以继承基类并实现一个或多个接口。

本节内容

相关章节

重要章节

接口学习 C# 3.0:控制基础 C# 3.0

请参见

参考

继承(C# 编程指南)

概念

C# 编程指南