• 最近学到一些linq和面向对象的经验分享


    最近学到一些linq和面向对象的经验分享给大家:
    1,如果界面上有数据和集合了,而这些数据实时性很强的话,可以使用linq 或者泛行对内存里面的数据进行处理。可以减少对数据库的查询压力。匿名类型很好用。可以让你不用创建很多的对象。
       sql里面能做的事情,大多数linq 也能做到。
         比如:       
       var 申请单列表= (from 别名 in 申请单集合
                                            group 别名 by new
                                    {
                                        科室名称 = 别名.科室名称,
                                        临床科室 =别名.临床科室,
                                        药品编码= 别名.  药品编码,
                                        药品名称 =  别名.  药品名称 ,
                                        规格=  别名.  规格 ,
                                    } into g
                                    select new
                                    {
                                        g.Key.   科室名称 ,
                                        g.Key.临床科室,
                                        g.Key. 药品编码,
                                        g.Key.TRADE_NAME,
                                        g.Key.规格,
                                        app_num = g.Sum(p => p.申请数量* p.每日用量)
                                    }).ToList();
     
    2,我们系统查询的集合好多是ArrayList数组 ,可以通过如下语句转换:
       List<实体> 实体集合= new List<实体集合>(数组集合.ToArray().Cast<实体集合>()).Where(p => p.实体属性.Length > 1).ToList<实体>(); 转换转换方便查询。
    3,属性数据量大的地方,尽量加上进度条,不要假死。
    4,个性化需求尽量做成开关,可自动配置。下面只列一种添加参数的代码:
       //是否只能药房人员(药师、药剂师)审核
            private bool isPharmaceutistOnly = true;
     
          /// <summary>
            /// 是否只能药师、药剂师审核
            /// </summary>
            [Description( "是否只能药师、药剂师审核"),Category("设置"),DefaultValue(true)]
            public bool IsPharmaceutistOnly
            {
                get
                {
                    return isPharmaceutistOnly; 
                }
                set
                {
                    isPharmaceutistOnly = value; 
                }
            }
    后面的设置现场写过代码都都知道怎么配了。就不多说了。
    5,重点分享一下:如果一个接口被很多个类实现了。突然有一天有一个类需要有一个特殊功能。怎么办呢?如果在这个接口里面添加一个方法,会出现要把所有实现此接口的的类做一个空的实现,改动比较大。
    建议新建一个接口,只让需要这个功能的类实现这个接口。那么加上以前的接口。这个类就实现了多个接口了。同时又不需要改到其他的类。
    6,第5点实现了接口如何调用呢。
        有两种方法,1,通过类的实例化调用。
                              2,通过反射机制调用。
       这里需要注意的是:“接口不可以实例化,但是可以通过一个类来实现接口,如果一个类被实例化了,不管他是通过什么方式实例化的(包括反射),那么他就具备了此类所具备的所有功能特性”。理解了这句话,在调用的时候就可以巧妙的应用:
    如:
        A,B,C,D是类, IA,IB,IC,ID 是接口;
     
      A继承IA;B继承IB,IA;C继承IC,ID,D继承IC
    突然A要添加一个功能。我添加一个IE接口,让A继承IA,IE。
    因为IA的功能很早以前就可以实现的。那么如果要直接调用IE的接口方法。
    可以通过如下方式调用:
        1,假设以前实例化得A赋值给了G
     2,可以通过G的类型转换成IE,这样就可以访问IE的方法了。如:
           接口IA= G类 as 接口IA;  
           接口IE= G类 as 接口IE;  
            接口IE.方法();
        3,如果你试图重新实例化IE接口,可能会导致类G被初始化掉。这里要小心。
  • 相关阅读:
    DVWA实验之Brute Force(暴力破解)- Low
    《Web安全攻防 渗透测试实战指南 》 学习笔记 (五)
    Bugku-web进阶之phpcmsV9(一个靶机而已,别搞破坏。flag在根目录里txt文件里)
    Bugku-CTF社工篇之简单的社工尝试
    Bugku-CTF社工篇之王晓明的日记
    Bugku-CTF社工篇之社工进阶
    Bugku-CTF社工篇之简单的个人信息收集
    Bugku-CTF社工篇之信息查找
    Bugku-CTF社工篇之密码
    Bugku-CTF之login3(SKCTF)(基于布尔的SQL盲注)
  • 原文地址:https://www.cnblogs.com/cegh/p/3857541.html
Copyright © 2020-2023  润新知