博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最近学到一些linq和面向对象的经验分享
阅读量:5172 次
发布时间:2019-06-13

本文共 1569 字,大约阅读时间需要 5 分钟。

最近学到一些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被初始化掉。这里要小心。

转载于:https://www.cnblogs.com/cegh/p/3857541.html

你可能感兴趣的文章
(转)MFC界面风格
查看>>
Centos7 tmux1.6 安装
查看>>
二叉树(三)
查看>>
linux加密文件系统 fsck 无法修复一例
查看>>
【linux配置】VMware安装Redhat6.5
查看>>
AI自主决策——有限状态机
查看>>
《http权威指南》阅读笔记(二)
查看>>
软件工程
查看>>
http协议
查看>>
js替换问题replace和replaceAll
查看>>
c++11 : range-based for loop
查看>>
中国农历2013,2014 (zz.IS2120@BG57IV3)
查看>>
用virtualenv建立独立虚拟环境 批量导入模块信息
查看>>
Sublime Text3 插件:convertToUTF8
查看>>
BZOJ4060 : [Cerc2012]Word equations
查看>>
hdu2089不要62(数位dp)
查看>>
JAVA输出最大值和最小值
查看>>
64位weblogic11g安装
查看>>
oracle、mysql、sql server等;流行数据库的链接驱动配置
查看>>
UvaLive 6664 Clock Hands
查看>>