zoukankan      html  css  js  c++  java
  • c#设计模式第一天

      最近在升级软件版本,升级是一件让我非常头疼的事情,里面太过于复杂,每次都得要重新理一次,自己也不得不承认自己的设计不合理,后来读了一些设计模式的文章觉得受益匪浅,设计模式是软件的灵魂所在,精华的总结,很长一段时间自己在看别人源码的时候什么bll,DAL,之类的文件夹,当时很不解为什么要这么做,尽管自己也去用一些比如数据库多支持之类的类,为什么人家用接口,当时觉得自己按照自己的想法,没必要用这些,非常遗憾过了三年自己猜领悟接口与设计模式的重要性,以及为何要用它,今天开始自己记录下自己的每日总结,并把一些经验与大家一起分享,作为一个自学者,相信会引起自学者的共鸣,欢迎大家跟我一起学设计模式,我会把自己的理解分享给大家

    今天第一次阅读,还没进入正文,那先说说我对泛型和lamp表达式的一些简单的理解吧,以后写的多数都是来自设计模式一书的例子,记录出来主要1是为了自己学习的进度,2是方便自己复习

    例子是最好的说明

    先看一段代码

      public static class EnumerableHelper
        {
            /// <summary>
            /// Execute Action for each element in <see cref="IEnumerable<T>"/>
            /// </summary>
            public static void ForEach<T>(this IEnumerable<T> sequence, Action<T> action)
            {
                if (sequence == null)
                    throw new ArgumentNullException("sequence");
                if (action == null)
                    throw new ArgumentNullException("action");
                foreach (var item in sequence)
                    action(item);
            }
    
          
        }
    

      这是来自设计模式一文作者的部分源码

    首先这个类定义了一个泛型方法,需要 using System.Linq;

    有了这个之后,它像什么呢,像http://bbs.csdn.net/topics/390162519这篇文章里面的扩展类的使用,其实我理解是一个道理

    using System;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public static class Extensions
        {
            public static void SafeCall(this Control ctrl, Action callback)
            {
                if (ctrl.InvokeRequired)
                    ctrl.Invoke(callback);
                else
                    callback();
            }
        }
    }
    

      这样子,那么调用时候点一下就有

    label1.SafeCall(() =>
                        {
                            label1.Text = i.ToString();
                        });
    

      

    其实他对Ctrol做了一个扩展,你可以把Control是所有控件泛型一样,这里定义了一个泛型之后,那么所有类型都会具备这么个方法了,于是乎我们就有了这样的调用

      string[] data = { "A", "B", "CDE", "FG" };
                int[] lens = new int[data.Length];
                int i = 0;
                //第一种用法,对于泛型可以支持所有,所以它也会有这样的扩展
                data.ForEach(
                     delegate(string item)
                     {
                         lens[i++] = item.Length;
                         Trace.WriteLine(lens[i - 1]);
                     });
    

      如果我按照以前的思维调用是

                EnumerableHelper.ForEach<string>(data,
                    delegate(string item)
                    {
                        lens[i++] = item.Length;
                        Trace.WriteLine(lens[i - 1]);
                    });
    

      那么再看,其实泛型经常与lamp表达式搭配

    怎么改写成lamp表达式

       data.ForEach(
                   t =>
                   {
                       lens[i++] = t.Length;
                       Trace.WriteLine(lens[i - 1]);
                   }
                    );
    

      或者

    data.ForEach(
    (t) => { lens[i++] = t.Length; Trace.WriteLine(lens[i - 1]); }
    );


      

    其实是一个道理,很少写文章,我表达的意思不知道大家可否看得明白

    另外给大家说一个关键字params这个我平时用的比较少,今天也算遇到,我想或许以后数据库操作参数一类会用到或者自己扩展,其实这个参数我估计大家都遇到过,就是在数据库通用类之类的地方相信大家估计只用却很少留意

    它的意思是

    params 构造函数声明数组 而不知道数组长度 用的
    在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。
    也就是不固定参数,也就是说 参数的维数不固定,你想几个,就可以几个,
    在获取参数的地方也相应读取的就可以了
    例如

     public static void UseParams2(params object[] list) 
        {
            for (int i = 0 ; i < list.Length; i++)
            {
                Console.WriteLine(list[i]);
            }
            Console.WriteLine();
        }
    

      调用就是

    UseParams2(1, 'a', "test"); 

       public static void UseParams(params int[] list) 
        {
            for (int i = 0 ; i < list.Length; i++)
            {
                Console.WriteLine(list[i]);
            }
            Console.WriteLine();
        }
    

      调用就是

     UseParams(1, 2, 3);
  • 相关阅读:
    给字符数组赋值的方法
    linux服务之varnish
    Java实现第八届蓝桥杯承压计算
    Java实现第八届蓝桥杯承压计算
    Java实现第八届蓝桥杯迷宫
    Java实现第八届蓝桥杯纸牌三角形
    Java实现第八届蓝桥杯纸牌三角形
    Java实现第八届蓝桥杯分巧克力
    Java实现第八届蓝桥杯迷宫
    Java实现第八届蓝桥杯分巧克力
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2981069.html
Copyright © 2011-2022 走看看