Pet Shop 4.0中的Sqlhelper中static关键字分析

来源:互联网 发布:科比0607赛季数据 编辑:程序博客网 时间:2024/05/17 07:46

 

Sqlhelper里面的方法和字段就不说了,讲讲里面的static关键字用法

 

static关键字用到类里面的方法以及字段上,就可以用类名直接访问.我想这个基本语法大家都是知道的.下面来讨论为何要在Sqlhelper中用static关键字,这样做有什么好处

 

1.    首先如果是常用的字段是静态的 public static readonly string . 所以常用的且以后经常要用到的.特别在Pet Shop里面多出调用.申明成静态有助于减少系统开销.还有一点:与实例无关的方法或字段就可以声明成静态的,以表示他们类的特性

 

2.    关于Sqlhelper静态方法是否能支持多线程

 

Sqlhelper方法都是静态的,为何这样.其中就是为了方便调用,且他们是与实例无关的.

 

上面只是解释了用静态的方法和字段的好处:不用实例化了嘛,可用类名直接调用,且减少系统开销.但是又引入了一个新的问题就是: 静态方法是否支持多线程同步

 

我们来看看当Pet Shop 项目本身就是用多线程来插入的,静态的方法是否会引起不同步呢,答案是 不会出现多线程同时调用静态方法所引起不同步问题.

 

 因为首先静态的方法只能访问静态的类字段和类的静态方法,如果要在静态类中使用非静态方法或类,字段等,那么就要在静态方法中实例化一个类(前提这个类是可以被实例)并调用一个非静态的方法或非静态的字段.

Sqlhelper中的一个静态方法

public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)

 

里面的一个SqlCommand cmd = new SqlCommand(); 类变量

所以当多线程调用这个静态方法ExecuteNonQuery,会在内存中建立多个对应的SqlCommand cmd = new SqlCommand();镜像以使每个线程互不干扰. 所以多线程使用Sqlhelper插入数据到数据库是不会相互干扰的

 

原创粉丝点击