首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> .NET Framework >> 正文

.Net Framework框架源码学习

         Singleton模式,由于其实现相对简单,所以号称设计模式中最简单的模式.
  但是static通常会给你造成一些障碍.不信啊,那你就看看吧,而且还有几个Effective C#条款 :) 希望不会让你失望. 
   
           该篇并没有涉及到.Net Framework源码,就算是挂羊头卖狗肉吧.希望延续上篇的高质量.
  让我们先来写个简单的SqlHelper吧,封装SQL数据库的操作.
  
  using System;
  using System.Data;
  using System.Data.SqlClient;
  
  namespace APeng
  {
   public class SqlHelper
   {
   private string m_connString = "Data Source=(local);" +
   "User ID=sa;Password=password;Initial Catalog=discuz;Pooling=true";
   //Sql数据库连接字符串
  
   public SqlDataReader ExecuteReader(CommandType cmdType, string cmdText, params SqlParameter[] cmdParms) {
   SqlCommand cmd = new SqlCommand();
   SqlConnection conn = new SqlConnection(m_connString);
  
   try
   {
   PrepareCommand(cmd, conn, cmdType, cmdText, cmdParms);
   SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
   cmd.Parameters.Clear();
   return rdr;
   }
   catch (Exception ex)
   {
   conn.Close();
   conn.Dispose();
   throw ex;
   }
   }
  
   private void PrepareCommand(SqlCommand cmd, SqlConnection conn, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
   {
  
   if (conn.State != ConnectionState.Open)
   conn.Open();
  
   cmd.Connection = conn;
   cmd.CommandText = cmdText;
   cmd.CommandType = cmdType;
  
   if (cmdParms != null)
   {
   foreach (SqlParameter parm in cmdParms)
   cmd.Parameters.Add(parm);
   }
   }
   }
  }
  
  这段代码大家应该很熟悉了,接下来让我们来使用它.
  
  
  using System;
  using System.Data;
  using System.Data.SqlClient;
  
  namespace APeng
  {
   class Program
   {
   static void Main(string[] args)
   {
   SqlHelper helper = new SqlHelper();
   string cmdText = "select fid,name from dnt_forums";
   using (SqlDataReader reader = helper.ExecuteReader(CommandType.Text, cmdText, null))
   {
   while (reader.Read())
   {
   Console.WriteLine("编号:" + reader["fid"]);
   Console.WriteLine("名称:" + reader["name"]);
   }
   }
  
   Console.Read();
   }
  
  
   }
  } 
   
   
   
           程序正常输出: 编号:1 名称:版块1 编号:2 名称:版块2
  很简单,不是嘛.
  
  接下来我们将要优化这个SqlHelper
  一) 将SqlHelper中的private string m_connString = "......" 修改成 private static readonly string m_connString = "......" 
   
           这个修改是否有必要呢? (如果没能给我带来什么好处,我为什么要修改呢,所以你得说服我!) 
   
           小菜先在A地方实例化一个SqlHelper.
  SqlHelper helper1 = new SqlHelper();
  那么会有如下构造过程:
  1.为数据成员m_connString分配内存空间,此时空间存储数据为null
   (如果是值类型如int,float,double等,空间存储数据为0,如果是引用类型空间存储数据为null,下面还会详细说明)
  2.执行数据成员m_connString的初始化语句,也就是上面的private string m_connString = "......"
   (那么现在空间存储数据为"......")
  3.执行SqlHelper的构造函数
  
  小菜然后在B地方又实例化一个SqlHelper.
  SqlHelper helper2 = new SqlHelper();
  那么会有如下构造过程:
  1.为数据成员m_connString分配内存空间,此时空间存储数据为null
  2.执行数据成员m_connString的初始化语句,也就是上面的private string m_connString = "......"
   (那么现在空间存储数据为"......")
  3.执行SqlHelper的构造函数 
   
           噢,有没有搞错啊,怎么一直为m_connString分配内存空间.
  而且老是把m_connString空间存储数据置为相同的 "......"
  该死的,你就不能聪明点,做一次就够了.(浪费我们宝贵的时间和宝贵的内存资源) 
   
           唉,看来我们得自己动手优化了.怎么优化呢?
  等等,小菜刚才说什么来着?修改成private static readonly string m_connString = "......".
  那它能改变这种状况吗? 
   
           小菜先在A地方实例化一个SqlHelper.
  SqlHelper helper1 = new SqlHelper();
  那么会有如下构造过程:
  1.为静态数据成员m_connString分配内存空间,此时空间存储数据为null
   (如果是值类型如int,float,double等,空间存储数据为0,如果是引用类型空间存储数据为null,下面还会详细说明)
  2.执行静态数据成员m_connString的初始化语句,也就是上面的private static readonly string m_connString = "......"
  (那么现在空间存储数据为"......")
  3.执行SqlHelper的构造函数 
   
           小菜然后在B地方又实例化一个SqlHelper.
  SqlHelper helper2 = new SqlHelper();
  那么会有如下构造过程:
  1.执行SqlHelper的构造函数 
   
    

[1] [2] [3] [4] 下一页

【责编:Luzi】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航