zoukankan      html  css  js  c++  java
  • ●扩展方法

        扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。这是msdn官网对扩展方法的描述。

    举个例子:

        static void Main(string[] args)
        {
            DateTime now = DateTime.Now;
            string time = now.ToString("yyyy-MM-dd HH:mm:ss");
            Console.WriteLine(time);
        }

          假设需求变了,日期格式要改成”yyyy-MM-dd”,当然只需要初始化time时按下面的写法改就可以:

            string time = now.ToString("yyyy-MM-dd");

        但是如果要改变的日期格式有多个类呢,每个都改一次么?这样一旦需求变来变去,就忙死人了。传统的方法是封装一个帮助类,在里面写方法,然后其他类调用。

        public class DateHelper
        {
            public static string DateToString(DateTime dt)
            {
                return dt.ToString("yyyy-MM-dd HH:mm:ss");
            }
        }

        这样要调用另一个类的方法,还是有点麻烦,有没有什么方法能够让我们像now.ToString()一样直接调用呢?微软写好的,我们改不了,于是便引出了扩展方法。

    我们把DateHelper类改成静态类,同时改写DateToStrin()方法

        public static class DateHelper
        {
            public static string DateToString(this DateTime dt)
            {
                return dt.ToString("yyyy-MM-dd HH:mm:ss");
            }
        }

        此时回到主函数,输入“now.”就可以看见自动提示有个DateToString()方法,于是代码可以这样写:

        static void Main(string[] args)
        {
            DateTime now = DateTime.Now;
            string time = now.DateToString();
            Console.WriteLine(time);
        }

    多个参数:

        public static class DateHelper
        {
            /// <summary>
            /// 此时间是否在此范围内 -1:小于开始时间 0:在开始与结束时间范围内 1:已超出结束时间
            /// </summary>
            /// <param name="t"></param>
            /// <param name="startTime"></param>
            /// <param name="endTime"></param>
            /// <returns></returns>
            public static int IsRange(this DateTime t, DateTime startTime, DateTime endTime)
            {
                if (((startTime - t).TotalSeconds > 0))
                {
                    return -1;
                }
    
                if (((endTime - t).TotalSeconds < 0))
                {
                    return 1;
                }
    
                return 0;
            }
        }

    可以这样调用:time.IsRange(t1,t2); //判断时间time是否在t1到t2的范围内

    使用扩展方法需要注意:

    1、此方法必须是一个静态方法,同时必须放在静态类中;

    2、扩展方法不能和调用的方法放在同一个类中;

    3、第一个参数必须要,并且必须是this,这是拓展方法的标识。如果方法里面还要传入其他参数,可以在后面追加参数;

  • 相关阅读:
    rpm yum 等命令无响应的解决方法
    ulimit open files linux打开文件数设置验证
    解析XtraBackup备份MySQL的原理和过程(转)
    Xtrabackup之innobackupex备份恢复详解(转)
    Linux中内存查看命令free详解(转)
    mysql innobackupex xtrabackup 大数据量 备份 还原(转)
    Percona Xtrabackup备份mysql(转)
    安装完 MySQL 后必须调整的 10 项配置(转)
    MySQL 5.5 服务器变量详解二(转)
    MySQL 5.5 服务器变量详解一(转)
  • 原文地址:https://www.cnblogs.com/phantom-k/p/6594610.html
Copyright © 2011-2022 走看看