c#接口使用详解

c#接口使用详解

c#中接口隐式与显示实现

c#中接口可以隐式实现、显示实现,隐式实现更常使用、显示实现较少使用
其区别在于

  1. 显示实现避免接口函数签名冲突
  2. 显示实现只可以以接口形式调用
  3. 显示实现其子类需无法继承接口
  4. 隐式实现可以撕裂调用、可以接口调用
  5. 隐式实现其子类可以继承接口的实现
  6. 隐式实现可以使用虚函数、子类可以重载

定义接口:

interface IShowMsg
{
    void Show();
}

隐式实现示例:

class ShowMsgImplicit : IShowMsg
{
    public void Show()
    {
        Console.WriteLine("ShowMsgImplicit");
    }
}

显示实现示例:

class ShowMsgExplicit : IShowMsg
{
    void IShowMsg.Show()
    {
        Console.WriteLine("ShowMsgExplicit");
    }
}

若使用:

var showMsgExplicit = new ShowMsgExplicit();
showMsgExplicit.Show();

将报错,只能使用(showMsgExplicit as IShowMsg).Show();调用

接口在继承中的使用

接口显示实现是无法在继承中保留的,若希望子类继承接口的实现需使用隐式实现。

  1. 使用隐式实现
  2. 若子类可以overwrite请使用virtual关键字修饰实现函数
  3. 可以定义abstract类继承接口,强制子类实现接口

父类实现接口:

class ShowMsgImplicit : IShowMsg
{
    public virtual void Show()
    {
        Console.WriteLine("ShowMsgImplicit");
    }
}

子类继承父类之后可以重载或者默认使用父类方法实现接口。

抽象类实现接口:

abstract class ShowMsgAbstract : IShowMsg
{
    public abstract void Show();
}

子类继承抽象类必须实现抽象方法实现接口。

posted @ 2017-05-15 21:56  冰不化  阅读(1385)  评论(0编辑  收藏  举报