首页 > 代码库 > 最近学到一些linq和面向对象的经验分享

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