使用扩展方法来扩展接口-阿里云开发者社区

开发者社区> 芝麻软件> 正文

使用扩展方法来扩展接口

简介: 不清楚扩展方法的清先预热下 推荐:http://www.cnblogs.com/luluping/archive/2008/05/26/1207530.html 摘抄:http://www.cnblogs.com/luluping/archive/2008/05/26/1207536.html 1、扩展方法跟原来类的方法重名时候的处理逻辑 2、扩展方法的嵌套 现在我们来看扩展方法使用的第三个场景:使用扩展方法来扩展接口 应用场景举例: 我们有时候会发现最初定义的一个接口,在现在环境下,这个接口需要再增加一个函数。
+关注继续查看

 不清楚扩展方法的清先预热下

推荐:http://www.cnblogs.com/luluping/archive/2008/05/26/1207530.html

摘抄:http://www.cnblogs.com/luluping/archive/2008/05/26/1207536.html

1、扩展方法跟原来类的方法重名时候的处理逻辑

2、扩展方法的嵌套

现在我们来看扩展方法使用的第三个场景:使用扩展方法来扩展接口

应用场景举例:

我们有时候会发现最初定义的一个接口,在现在环境下,这个接口需要再增加一个函数。有了扩展方法后,我们在这种情况下又多了一种实现的选择。
。。。。。。 分析这样做的好处:
1、假如我们实现 MyInterface 接口的类很多,这些类没有派生关系,这时候我们要在接口上新增一个函数,按照以前的做法,这个接口的实现类有多少个,我们就需要改多少个,使用了扩展方法后,我们只需要改一个地方。减少代码量。假如实现这个接口的类被封装在不同的组件中,一些组件由于其他原因难以修改,这时候用扩展方法来扩展接口真是给我们一剂良药呀; 2、扩展方法被调用到,前提条件是扩展方法所在的命名空间被使用了。我们假如把接口跟扩展方法放到同一个命名空间,扩展方法需要引用命名空间的问题就能够认为不存在了。因为您要用这个接口,必然会引用这个命名空间。 3、扩展方法扩展的接口,和您自己实现这个接口的类中自己实现的函数重名时候的问题(这时候也能够简单认为是这个类 override 了这个函数实现)。 先说结论:这两个不存在冲突问题,您假如是接口调用,则是扩展方法,假如是实现类调用,则是实现类自己的方法

 

1.类

/// <summary>
    /// 接口
    /// </summary>
    public interface IEatClass
    {
        bool hasEat();
    }

    /// <summary>
    /// 实现类
    /// </summary>
    public class EatClass : IEatClass
    {
        public bool hasEat()
        {
            return false;
        }
    }
    /// <summary>
    /// 扩展类
    /// </summary>
    public static class EatClassExtensions
    {
        public static bool hasEat(this IEatClass eat, int i)
        {
            if (i > 0) return true;

            return false;
        }
    }

2.调用

EatClass eat = new EatClass();
var res = eat.hasEat();//输出FALSE
var res1 = eat.hasEat(1);//输出TRUE

3.如果扩展方法在不同的命名空间下

代码:

namespace Company.Business.Ext
{
    /// <summary>
    /// 扩展类
    /// </summary>
    public static class EatClassExtensions
    {
        public static bool hasEat(this IEatClass eat, int i)
        {
            if (i > 0) return true;

            return false;
        }
    }
}

调用时候加上新命名空间即可

using Company.Business.Ext;

===================================

在不同的命名空间下这个破问题,折腾了一早上,基础太差了,继续干活。。。

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
创建卡券模板接口(alipay.pass.template.add)JAVA版本小样
官方接口文档:https://docs.open.alipay.com/199/105250/  基本操作流程  1.创建应用等流程不概述了,调用该接口主要第一步是模板设计:推荐使用卡券平(https://alipassprod.
454 0
新浪微博Python客户端接口OAuth2
Keyword: Python Oauth2 微博 sina weibo   #!/usr/bin/env python # -*- coding: utf-8 -*- __version__ = '1.
1039 0
Elasticsearch 指南 [7.0] - Document APIs 文档接口
Elasticsearch 指南 [7.0] - Document APIs 文档接口
3312 0
新浪微博Python3客户端接口OAuth2
Keyword: Python3 Oauth2 新浪微博 本接口基于廖雪峰的weibo python SDK修改完成,其sdk为新浪官方所推荐,原作者是用python2写的 经过一些修改,这里提供基于python3的 weibo SDK     #!/usr/bin/env python # -*- coding: utf-8 -*- __version__ = '1.
1070 0
利用新浪微博接口生成漂亮的微博卡片
新浪微博开放平台(http://open.weibo.com/)提供了大量的接口API,如粉丝,微博,评论,用户读取等26个接口,共分为微博相关API,公共服务API,地理信息API等三大板块API。开发者只需注册开放平台App Key,即可利用开放平台提供的API测试工具测试各个不同的接口。
1405 0
+关注
芝麻软件
编程语言,框架相关专家
579
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载