如果针对一个类型实例的代码片段经常被用到,我们可能会想到把之封装成帮助方法。如下是一段针对DateTime类型实例的一段代码:

    class Program
    {
        static void Main(string[] args)
        {
            DateTime d = new DateTime(2001,5,18);
            switch (d.DayOfWeek)
            {
                case DayOfWeek.Saturday:
                case DayOfWeek.Sunday:
                    DoWeekendThing();
                    break;
                default:
                    DoWeekDayThing();
                    break;
            }
            Console.ReadKey();
        }
        static void DoWeekendThing()
        {
            Console.WriteLine("周末好好休息放松心情");
        }
        static void DoWeekDayThing()
        {
            Console.WriteLine("认真工作");
        }
    }

以上,把判断是否是周末的代码片段封装到帮助类、帮助方法中如下:

    public static class DateTimeHelper
    {
        public static bool IsWeekend(DateTime dateTime)
        {
            switch (dateTime.DayOfWeek)
            {
                case DayOfWeek.Saturday:
                case DayOfWeek.Sunday:
                    return true;
                default:
                    return false;
            }
        }
    }

在客户端:

    class Program
    {
        static void Main(string[] args)
        {
            DateTime d = new DateTime(2001,5,18);
            if (DateTimeHelper.IsWeekend(d))
            {
                DoWeekendThing();
            }
            else
            {
                DoWeekDayThing();
            }
            Console.ReadKey();
        }
        static void DoWeekendThing()
        {
            Console.WriteLine("周末好好休息放松心情");
        }
        static void DoWeekDayThing()
        {
            Console.WriteLine("认真工作");
        }
    }

用帮助类、帮助方法固然好,因为进行了很好的封装,但每次都必须要记住扩展方法在DateTimeHelper这个扩展类中。如果System.DateTime包括IsWeekend方法会更好!

扩展方法是一种特殊的静态方法,可以让编写的方法像现有类型的实例方法一样被使用。

   public static class DateTimeExtensions
    {
        public static bool IsWeekend(this DateTime dateTime)
        {
            switch (dateTime.DayOfWeek)
            {
                case DayOfWeek.Saturday:
                case DayOfWeek.Sunday:
                    return true;
                default:
                    return false;
            }
        }
    }

○ 扩展方法必须在静态类中
○ 扩展方法必须是静态方法
○ 扩展方法的第一个参数必须是需要被扩展的类型,而且前面必须加this关键字

客户端修改为:

    class Program
    {
        static void Main(string[] args)
        {
            DateTime d = new DateTime(2001,5,18);
            if (d.IsWeekend())
            {
                DoWeekendThing();
            }
            else
            {
                DoWeekDayThing();
            }
            Console.ReadKey();
        }
        static void DoWeekendThing()
        {
            Console.WriteLine("周末好好休息放松心情");
        }
        static void DoWeekDayThing()
        {
            Console.WriteLine("认真工作");
        }
    }

总结:扩展方法貌似略好于帮助方法,可以作为类型实例的方法直接被调用。

转载于:https://www.cnblogs.com/darrenji/p/4114699.html

扩展方法略好于帮助方法相关推荐

  1. jquery订阅发布插件代码草稿,为jquery扩展jquery.publish,jquery.subscribe方法

    jquery订阅发布插件代码草稿! jquery订阅发布插件代码草稿,为jquery扩展jquery.publish,jquery.subscribe方法 --- jquery订阅发布插件代码草稿 & ...

  2. 文件后缀_电脑文件名的后缀即扩展名的显示和隐藏方法

    前两天碰到一个同事问我,他的文件名后面的格式不显示了,就是扩展名,比如Word文档名称后缀的doc或者docx和Excel表格名称后缀的xls或者xlsx没有了,还有一些其他文件的后缀也不显示了.我三 ...

  3. Python使用pandas扩展库DataFrame对象的pivot方法对数据进行透视转换

    Python扩展库pandas的DataFrame对象的pivot()方法可以对数据进行行列互换,或者进行透视转换,在有些场合下分析数据时非常方便. DataFrame对象的pivot()方法可以接收 ...

  4. 【浏览器】Chrome/Edge外部导入扩展(.crx)无法启用的解决方法

    一.原因 谷歌以"保护 Chrome 用户免受恶意扩展程序的侵害"为由禁用了外部扩展程序的安装,且该限制无法"正常地"通过修改设置解除. 谷歌留下了另一种极其复 ...

  5. 人力资源机器 android,人力资源机器攻略所有章节过关方法详解

    人力资源机器攻略所有章节过关方法详解,玩家们在游戏中需要能够很好的找到一些帮助我们的小技巧,并且准确的过关去,在人力资源机器攻略中就为玩家们详细地介绍了一些简单的小技巧,以及过关时需要完成的任务类型, ...

  6. 扩展 VirtualBox 已分配磁盘的方法

    扩展 VirtualBox 已分配磁盘的方法 第一步:用VirtualBox命令行调整已分配磁盘的大小 第二步:用windows磁盘管理工具扩展磁盘空间 其他无关配置 如何选择虚拟机的芯片组 注意:扩 ...

  7. 中国式家长计算机科学家攻略,中国式家长九代内攻略6个妹子方法详解

    中国式家长如何攻略6个妹子?中国式家长玩家可以多代目进行游戏,每一代都由概率可以攻略女主,不过也很容易被拒绝,下面那小编为大家整理一下中国式家长如何在9代内攻略6个妹子,一起来了解一下吧. 中国式家长 ...

  8. win11扩展屏幕黑屏怎么办 windows11扩展屏幕黑屏的解决方法

    我们有时候会因为一些情况会去扩展电脑屏幕,但是有些小伙伴发现扩展的屏幕黑屏无法进行使用,那么要遇到这种情况应该怎么办呢?下面就和小编一起来看看有什么方法吧.更多windows11系统教程可以参考小白一 ...

  9. 神经网络异常检测方法和机器学习异常检测方法对于入侵检测的应用?

    神经网络异常检测方法和机器学习异常检测方法对于入侵检测的应用? 神经网络异常检测方法神经网络入侵检测方法是通过训练神经网络连续的信息单元来进行异常检测,信息单元指的是命令爱发猫 www.aifamao ...

最新文章

  1. ABBYY在MS Office中创建PDF文件的方法
  2. 基于SSM+Layui实现医院预约挂号系统
  3. checkpoint技术mysql_认识MySQL中的Checkpoint技术
  4. 读取 XML 数据时,超出最大字符串内容长度配额 (8192)
  5. Python有自动完成功能的IDE 么?
  6. 周涛:悠扬事业后的隐秘爱情
  7. nginx中的try_files指令解释
  8. django-新的django项目
  9. AYOJ N皇后问题
  10. win10怎么重装系统虚拟机win7
  11. 编写一个函数itob(),将整数n转换为以b进制的数,保存到s中
  12. CMakeLists.txt是什么
  13. iOS-绘制UIView之drawCGRect
  14. python中write的用法_python中write方法是如何使用?
  15. 栅栏密码解密——Java实现
  16. 医药电子 | 温度传感器的类型原理特点和应用
  17. matlab神经网络训练图解释,matlab实现神经网络算法
  18. CSS让DIV上下左右居中的方法
  19. Nmap学习8 - 端口扫描实验
  20. 读书笔记《蛤蟆先生去看心理医生》

热门文章

  1. 0710 mux协议的作用(ppp拨号时如何和gprs进行at指令交互)
  2. os.path 模块
  3. (第2篇)一篇文章教你轻松安装hadoop
  4. SQLServer 优化SQL语句 in 和not in的替代方案
  5. 汇总:一些不错的使用频率比较高的JS函数
  6. Confirm的用法!
  7. Eclipse 插件开发 向导
  8. Azure PowerShell (16) 并行开关机Azure ARM VM
  9. 配置Server Side TAF
  10. Entity Framework 6 Recipes 2nd Edition(13-2)译 - 用实体键获取一个单独的实体