测试中的代码分享~将可以合并的方法去合并Func不赖_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 测试中的代码分享~将可以合并的方法去合并Func不赖

测试中的代码分享~将可以合并的方法去合并Func不赖

 2013/9/27 14:52:18  张占岭  博客园  我要评论(0)
  • 摘要:在面向对象的设计中,我们经常会谈到“重构”,而重构之中有个叫合并方法的,就是将多个方法干的事类似,或者说,方法体的长向很像,那么,我们需要去考虑,将它们进行抽象!原来的代码:///<summary>///单数累加///</summary>///<paramname="a"></param>///<paramname="b"></param>///<returns><
  • 标签:方法 测试 代码

在面向对象的设计中,我们经常会谈到“重构”,而重构之中有个叫合并方法的,就是将多个方法干的事类似,或者说,方法体的长向很像,那么,我们需要去考虑,将它们进行抽象!

原来的代码:

     /// <summary>
        /// 单数累加
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        static int AddOpreation(int a, int b)
        {
            int sum = 0;
            for (int i = (a < b ? a : b); i <= (a > b ? a : b); i++)
            {
                sum += i;
            }
            return sum;
        }
        /// <summary>
        /// 乘方累加
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        static int AddInvolutionOpreation(int a, int b)
        {
            int sum = 0;
            for (int i = (a < b ? a : b); i <= (a > b ? a : b); i++)
            {
                sum += i * i;
            }
            return sum;
        }

可以看到这两个方法的方法体基本相同 ,只是在累加时第一个是原数累加,第二个方法是原数的乘方作累加,对于上面的代码,我们可以进行再次抽象,将不相同

的代码逻辑提出来,我们知道.net 3.5有了Action和Func两个委托,事实上,这两个委托是微软为我们封装好的,原来就是因为它们常用,所以,人家直接给封装好了,这一点,是值得我们去学习的,有人说,微软的东西升级快,但我要说的是,它的升级不是语言本身的升级,而是为了让开发人员更方便的使用它,让开发人员

的代码写出来更可读,让代码的艺术性更强,这是我想说的。

下面是把变化的部分抽象之后的结果,看代码:

        /// <summary>
        /// 按着某种方法进行累加
        /// </summary>
        /// <param name="func"></param>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        static int BothIntegerOpreation(Func<int, int> func, int a, int b)
        {
            int sum = 0;
            for (int i = (a < b ? a : b); i <= (a > b ? a : b); i++)
            {
                sum += func(i);
            }
            return sum;
        }

而在调用的时间,我们将具体的实现逻辑以参数的形式传递进来,有人说,委托用不到,但我想说,那是你对委托还不够了解!

            Func<int, int> funcAdd = (a) => { return a; };//以变量的形式定义委托的实例逻辑
            int res1 = BothIntegerOpreation(funcAdd, 1, 3);
            int res2 = BothIntegerOpreation((a) => { return a * a; }, 1, 3);//直接在方法调用时写逻辑
            Console.WriteLine(res1.ToString() + res2.ToString());

结果如下:

QQNBkXQYFAxNLg9w9DRaNTnD7S4p45fePDx8P1Prkx+em0iSJIsQ8Oytt1lGTouNLphBNDgGkKjE9YDzSsLOxoMijoaDIKOlu5qU0LzyocGSusGpLfrLC7poKHejb6E0Pw+GmCtRqM+f6Dj+h/dt3+33/n13L2HjgdTMqHBB8np6I2CLq7u5TiOYVe0Nb2KoffUOaEyhNZb3VAZdHRMWdDRa9Dzi5TPH/BMPjoy8v17o98evjrefGMMQDMMzdAUy9DNN8dUgwYzMwsNgy4dYCQ5NFw6UGi4dKQHvbBI+fyBd4e+e//KN0eufX3s1mjLj0NBkmQYBnb06T87pNCcMAAavpQDDSen7GgwTfRjGFMW/BhC5ZTQcTt6TRmBjikL1mgwiK7RqaCXaJ8/cHj86tHrlz+4fen43cETk0SQJJdZBl095He0TGgwkmfmL7IKzbAr/xfo5ptjLT8MfzRx8eTP7s+m+oIkydKUCtBrTZ0YGiqj0IjyGjSqLF2jU+46wO2i7R0YFO06oHLa0B/e+erEPe+p+87Pf3F88VtPkCRnY2FoOhIJh5+HstTRKX8MMwXNN7VS6FhfC6DBhRQaXAuglyhm4qeHPn8ALRR6aXExFAqFnj1La43mOE66veO5JWs0h3Q0eJkpaOlfT/JjKIWW3i5neycKD/18nuZWWY5bjrJL3CrDcasct/zvCsXQFE1RCwvz4Ug4EgkvzEc25MASUxacDHll4cmQV1Z6MuSVs3cy7HddjPtkY+jS5eHR8QvIyNvHbPgIvo6nd8Yvtxla5VSOoRU/VMKPSTE0ht7w//FskdIQOKpEQxBEE072w0NrcLIdDK1SMLRKwdAqBYV+HIv825NMTvejNnkgtAKXJLco+M42eQC0gkZOQpn83S0aZdAgce+CgxhaEBQ63TaUTkZHMLQg0o6WD5QIWtnXtsmTWWj57265yIFO1JsYOo2ItndJQNHxlOsDXjrESXkyxFiZCT6CqxQMrVIwtErB0CoFQ6sUDK1S4j7rkLOlwzvl9BL3ebR8PgwtN4ke/GPoDCdRR8MJyZcI6Xii+Vt8qfkPlFIXv4Pf0mcAAAAASUVORK5CYII=" alt="" />

 

发表评论
用户名: 匿名