开放的编程资料库

当前位置:我爱分享网 > C#教程 > 正文

C#接口

在本文中,我们使用C#中的接口。

接口定义了必须由扩展接口的类和结构实现的契约。

遥控器是观众和电视之间的接口。它是此电子设备的接口。遥控器的用户不必了解特定遥控器的实际工作原理;他们只需要知道界面:红色或绿色按钮的作用,箭头按钮的功能是什么。

另一个常见的界面类比是道路交通规则。它们是驾车者、骑自行车者和行人必须遵守的规则。

接口是:

  • API
  • 合同

对象通过它们公开的方法与外界交互。实际的实现对程序员来说并不重要,或者它也可能是秘密的。一家公司可能会出售一个图书馆,但它不想透露实际的实施情况。程序员可能会在GUI工具包的窗口上调用Maximize方法,但对这个方法是如何实现的一无所知。从这个角度来看,接口是对象与外界交互的方式,而不暴露太多很多关于他们的内部运作。

从第二个角度来看,接口就是契约。如果达成一致,则必须遵守。它们用于设计应用程序的架构。它们有助于组织代码。

接口是完全抽象的类型。它们是使用interface关键字声明的。接口只能具有方法、属性、事件或索引器的签名。所有接口成员都隐含地具有公共访问权限。接口成员不能指定访问修饰符。接口不能有完全实现的方法,也不能有成员字段。一个C#类可以实现任意数量的接口。一个接口还可以扩展任意数量的接口。实现接口的类必须实现接口的所有方法签名。

接口用于模拟多重继承。一个C#类只能从一个类继承,但它可以实现多个接口。使用接口的多重继承不是关于继承方法和变量。它是关于继承由接口描述的思想或契约。

接口和抽象类之间有一个重要区别。抽象类为继承层次结构中相关的类提供部分实现。另一方面,接口可以由彼此不相关的类实现。

例如,我们有两个按钮。一个经典按钮和一个圆形按钮。两者都继承自为所有按钮提供一些通用功能的抽象按钮类。实现类是相关的,因为它们都是按钮。另一个例子可能有类DatabaseSignIn。它们彼此无关。我们可以应用一个ILoggable接口,强制他们创建一个方法来进行日志记录。

C#简单界面

下面的程序使用了一个简单的界面。

namespace SimpleInterface;

interface IInfo
{
    void DoInform();
}

class Some : IInfo
{
    public void DoInform()
    {
        Console.WriteLine("This is Some Class");
    }
}

class Program
{
    static void Main(string[] args)
    {
        var some = new Some();
        some.DoInform();
    }
}

这是一个演示界面的简单C#程序。

interface IInfo
{
    void DoInform();
}

这是一个接口IInfo。它具有DoInform方法签名。

class Some : IInfo

我们实现了IInfo接口。要实现特定接口,我们使用冒号(:)运算符。

public void DoInform()
{
    Console.WriteLine("This is Some Class");
}

该类提供了DoInform方法的实现。

C#多接口

下一个示例展示了一个类如何实现多个接口。

namespace MultipleInterfaces;

interface Device
{
    void SwitchOn();
    void SwitchOff();
}

interface Volume
{
    void VolumeUp();
    void VolumeDown();
}

interface Pluggable
{
    void PlugIn();
    void PlugOff();
}

class CellPhone : Device, Volume, Pluggable
{
    public void SwitchOn()
    {
        Console.WriteLine("Switching on");
    }

    public void SwitchOff()
    {
        Console.WriteLine("Switching on");
    }

    public void VolumeUp()
    {
        Console.WriteLine("Volume up");
    }

    public void VolumeDown()
    {
        Console.WriteLine("Volume down");
    }

    public void PlugIn()
    {
        Console.WriteLine("Plugging In");
    }

    public void PlugOff()
    {
        Console.WriteLine("Plugging Off");
    }
}

class Program
{
    static void Main(string[] args)
    {
        var cellPhone = new CellPhone();

        cellPhone.SwitchOn();
        cellPhone.VolumeUp();
        cellPhone.PlugIn();
    }
}

我们有一个继承自三个接口的CellPhone类。

class CellPhone : Device, Volume, Pluggable

该类实现了所有三个接口,以逗号分隔。CellPhone类必须实现所有三个接口的所有方法签名。

$ dotnet run
Switching on
Volume up
Plugging In

C#多接口继承

下一个示例显示接口如何从多个其他接口继承。

namespace InterfaceInheritance;

interface IInfo
{
    void DoInform();
}

interface IVersion
{
    void GetVersion();
}

interface ILog : IInfo, IVersion
{
    void DoLog();
}

class DBConnect : ILog
{

    public void DoInform()
    {
        Console.WriteLine("This is DBConnect class");
    }

    public void GetVersion()
    {
        Console.WriteLine("Version 1.02");
    }

    public void DoLog()
    {
        Console.WriteLine("Logging");
    }

    public void Connect()
    {
        Console.WriteLine("Connecting to the database");
    }
}

class Program
{
    static void Main(string[] args)
    {
        var db = new DBConnect();

        db.DoInform();
        db.GetVersion();
        db.DoLog();
        db.Connect();
    }
}

我们定义了三个接口。我们可以按层次结构组织接口。

interface ILog : IInfo, IVersion

ILog接口继承自另外两个接口。

public void DoInform()
{
    Console.WriteLine("This is DBConnect class");
}

DBConnect类实现了DoInform方法。该方法由类实现的ILog接口继承。

$ dotnet run
This is DBConnect class
Version 1.02
Logging
Connecting to the database

在本文中,我们介绍了C#接口。

列出所有C#教程。

未经允许不得转载:我爱分享网 » C#接口

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏