博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
显式实现接口和实现接口的区别
阅读量:5140 次
发布时间:2019-06-13

本文共 1975 字,大约阅读时间需要 6 分钟。

显式实现接口和实现接口的区别  

2012-06-19 23:33:46|  分类:  |  标签:  |举报|字号 订阅

c#中实现接口与显式实现接口的区别
2008-09-12 15:38

在实现接口的时候,VS提供了两个菜单,一个是"实现接口",一个是"显式实现接口",它们到底有何不一样呢

我们来比较一下看看

1.首先假设我们有一个接口

public interface ICustomer

{
    void SomeMethod();//接口的所有成员都暗自成为abstract,我们不能为它提供缺省实现,无论这份实现是 多么平淡无奇;接口的成员也都暗自成为public,我们不能以关键字abstract或 public来修改(修饰)其中某个成员。
}

2.如果是"实现接口",那么代码大致如下

public class Customer:ICustomer

{

    #region ICustomer 成员

    public void SomeMethod()

    {
        throw new NotImplementedException();
    }

    #endregion

}

3.如果是"显式实现接口",那么代码大致如下

public class Customer:ICustomer

{

    #region ICustomer 成员

    void ICustomer.SomeMethod()//显示接口成员的访问级别暗中是public,不允许程序员再加任何修饰符

    {
        throw new NotImplementedException();
    }

    #endregion

}

大家看到差别了吧?显式实现的方式,那些方法都会加上一个前缀的。但是,这到底意味着什么呢?

如果是实现接口

public class DAL {

    /// <summary>
    /// 如果我们是直接实现接口的话,那么既可以用接口调用方法,也可以用具体类调用方法
    /// </summary>
    public void GetCustomer() {
        Customer customer = new Customer();
        customer.SomeMethod();
    }

    public void GetCustomer2() {

        ICustomer customer = new Customer();
        customer.SomeMethod();
    }
}

如果是显式实现接口

public class DAL {

    /// <summary>
    /// 如果我们是显式实现接口的话,那么要访问里面的方法就只能是通过接口来调用,而不能通过具体类来做
    /// </summary>
    public void GetCustomer() {
        ICustomer customer = new Customer();
        customer.SomeMethod();
    }
}

此外,我们还可以在继承接口的类中同时提供实现接口和显式实现接口两种方式,这样就完成了对一个接口成员提供多份实现实体,访问时可以用类的实例和接口的引用来分别调用这两种实现实体。

现在大部分的系统为了保证扩展性,都广泛地使用接口。显式实现接口,可以隐藏具体类的复杂性。

转自:
总结:
实现接口,俗称也是隐士实现接口:
隐士实现接口,即可以通过实例化的类名点出来方法,也可以通过继承的接口的实例化来点出方法;
HelloJob 类继承的 IJob,实现接口
//实现接口即可以通过类名点出来方法,也可以通过接口来调用
方法1:
HelloJob job = new HelloJob();
JobExecutionContext context = null;
job.Execute(context);
方法2:
IJob job1 = new HelloJob();
job1.Execute(context);
显式实现接口(不要把“显式”写成了“显示”):
只能通过接口来调用方法
HelloJob 类继承的 IJob,显式实现接口
方法1实现不了:
HelloJob job = new HelloJob();
job点不出来
方法2可以实现:
//如果是显式实现接口的话,那么要访问里面的方法就只能是通过接口来调用,而不能通过具体类来做
IJob job1 = new HelloJob();
JobExecutionContext context = null;
job1.Execute(context);

显式实现益处

1:隐藏代码的实现

2:在使用接口访问的系统中,调用者只能通过接口调用而不是底层的类来访问。

转载于:https://www.cnblogs.com/Uinkanade/articles/4025414.html

你可能感兴趣的文章
@JoinColumn
查看>>
22_传智播客iOS视频教程_类的定义
查看>>
HDU 1856
查看>>
[HDU 2102] A计划(搜索题,典型dfs or bfs)
查看>>
推荐给4.3.3越狱用户的安全漏洞修复工
查看>>
用HTML的select+option标签实现下拉框
查看>>
[改善Java代码]asList方法产生的List对象不可更改
查看>>
ACM题目————Find them, Catch them
查看>>
LeetCode Weekly Contest 119
查看>>
Angular2-之开发环境搭建/调试环境配置
查看>>
DDA, Bresenham line's algorithm and Voxel Traversal used in the Grid-Accelerator in PBRT
查看>>
执行p4 submit后,perl文件丢了可执行属性
查看>>
数字电路中表示频率误差的ppm是什么意思?
查看>>
获取当前焦点所在元素
查看>>
11.8输入一个整数,求它是几位数
查看>>
你不知道的parseInt
查看>>
python基础之python基本数据类型
查看>>
vue中-webkit-box-orient:vertical打包放到线上不显示
查看>>
[Swift通天遁地]一、超级工具-(20)图片面部聚焦:使图像视图自动聚焦图片人物的面部位置...
查看>>
解决SVN提交和更新代码冲突?
查看>>