• 如何实例化接口


    通常我们的业务交给暴露给外部使用的时候,一般情况会采用接口的方式,但有时候,我们也会也会为对外暴露的业务接口提供默认的操作方法。
    很多时候,我们在别人提供的接口的默认方法时候,很难找到该接口的对应该方法(比较规范的编程方式还好找,如果是杂草式的编程方式的话,估计找半天都找不到)
    由此,我们对该问题展开讨论解决。

    我们都知道“接口是不能实例化接口”的。
    如(错误):

    public interface IErrorFace
    {
    void Error();
    }
    //错误的使用接口方式:
    IErrorFace ef = new IErrorFace();

    但我们可以通过实现接口来完成这一个功能。
    如(正确):

    public interface IErrorFace
    {
    void Error();
    }

    public class ErrorFace:IErrorFace
    {
    public void Error()
    {
    //TODO
    }
    }
    //使用接口:
    IErrorFace ief = new ErrorFace();
    ief.Error();//已在ErrorFace实现接口IErrorFace的方法

    但是我们采用了上面的正确方法,最终我们还是需要很努力的找出该接口对应的默认方法,那有没有一种方法可以按上面错误的方式使用,又能按上面正确方式执行里面的方法呢?

    下面我们请出几个特性来解决这一难题:ComImport,Guid,CoClass,这些特性位于:using System.Runtime.InteropServices;命名空间中
    我们将以上两种方式合并得到:

    [ComImport]
    [Guid("12341234-1234-1234-1234-123412341234")]
    [CoClass(typeof(ErrorFace))]
    public interface IErrorFace
    {
    void Error();
    }

    public class ErrorFace:IErrorFace
    {
    public void Error()
    {
    //TODO
    }
    }
    //使用接口:
    IErrorFace ief = new IErrorFace();
    ief.Error();
    IErrorFace ief1 = new ErrorFace();
    ief1.Error();

    当然,我们也新写一个对象来继续这个接口:

    public class ErrorFaceV1:IErrorFace
    {
    public void Error()
    {
    //TODO
    }
    }
    //使用接口:
    IErrorFace ief = new ErrorFaceV1();
    ief.Error();//在ErrorFace实现接口的方法

    但是有一点就是,这种接口的语法糖无法在外部识别其CoClass通过InteropClass编译时,只能通过内部编译别。
    如:

    public class ErrorFaceV2
    {
    public void ErrorUse()
    {
    //TODO
    }
    }

    以上的代码并没有继承IErrorFace接口,但它却可以编写如下(在编译过程中不会报错):

    //使用接口:
    IErrorFace ief = new ErrorFaceV1();
    ErrorFaceV2 v2=(ErrorFaceV2)ief;//该转换在执行过程出错,在编译过程不会出错。
    ief.Error();//在ErrorFace实现接口的方法











  • 相关阅读:
    PowerGhost
    watchdogs感染性挖矿病毒
    XorDDoS木马
    Gates(盖茨)木马
    seasame病毒
    zabbix监控之邮件报警通知
    ubuntu18.04 heirloom-mailx 通过外部SMTP服务器发送邮件
    linux小常识
    zabbix基本概念
    Zabbix图表中文乱码
  • 原文地址:https://www.cnblogs.com/magic_evan/p/2314881.html
Copyright © 2020-2023  润新知