declare @a nvarchar
--set @a=''
select * from students where (id between 1 and 5) and ((@a is null) or Name=@a)
这样实现where 后面多条件查询就简单很多!
刚刚使用静态类中的静态构造函数,有一些不太懂的地方,于是google了一下,看了一些文章,把自己的一些总结发上来吧。
google的初衷就是因为这个:
在类中初始化成员到底是直接初始化还是在类的静态构造函数中初始化呢?
还是先把最终的建议给展示出来:
第一就是简单静态成员,例如类型为值类型等,使用成员初始化语句来完成;
第二静态成员初始化比较复杂,或者有可能出现异常,那么用静态构造函数来完成。
下面是在网上找的一个例子,主要是熟悉下静态构造函数的执行顺序:
static class A
{
public static int X = B.Y;
static A()
{
++X;
}
}
static class B
{
public static int Y = A.X;
static B()
{
++Y;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(A.X);
Console.WriteLine(B.Y);
Console.Read();
}
}
不卖关子,先说下执行结果
2
1
下面来解释下:首先执行Console.WriteLine(A.X),于是,便会跳到类A中去,因为调用了成员X,于是先给X分配空间,并初始化为0,于是又执行X = B.Y这句,执行时候变跳到了类B中,首先也是初始化成员Y,并初始化为0,继续执行Y = A.X,因为A.X已经初始化为0了,所以直接Y=0,接着再执行类B的静态构造函数,于是Y变成了1,执行完后在回到X=B.Y这句中,以为B.Y==1,所以X=1,然后再执行A类的静态构造函数,于是A.X==2了。
可能上面有些绕,其实执行顺序就是,先初始化类中的静态成员,然后在执行类的静态构造函数,执行顺序:类的静态成员>类的静态构造函数。
一上就上对静态构造函数的一些理解。
犯了个低级错误,将静态字段定义在了方法中(不管是静态方法或者普通方法),结果编译器一直报:“修饰符static 对该项无效”。结果查了些资料然后自己整理了下,大概如下:
在类中,静态成员是属于类的一级成员,也就是说和类中的方法和属性等是同一个等级的,自然不能将一个静态的字段放在方法中去。反过来说如果你将一个静态字段放入了一个方法中,但是这个字段是静态的,所以按理来说是输入这个类的,可以直接使用“类名.方法名.静态变量”来访问,但是,方法在未调用时候是没有初始化的,既然方法没有初始化,方法中的成员又是属于方法的局部成员,自然按理来说也是访问不到的。那这样,不也是矛盾了。
仅记录下来,让自己少犯这种错误!
在4.0中微软带来了动态属性dynamic,于是我们可以用来实现反射的一些功能,并且可以大大提高性能。
下面先举一个不用dynamic来实现反射的例子
class Program
{
static void Main(string[] args)
{
DynamicSample dynamicSample = new DynamicSample();
//通过反射得到DynamicSample的方法
var add = dynamicSample.GetType().GetMethod("Add");
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < 100000; i++)
{
int re = (int)add.Invoke(dynamicSample, new object[] { 1, 2 });
}
watch.Stop();
Console.WriteLine(watch.ElapsedMilliseconds);//200毫秒左右
Console.Read();
}
}
public class DynamicSample
{
public string Name { get; set; }
public int Add(int a, int b)
{
return a + b;
}
}
试过几次,耗时基本在200毫秒左右,然后我们用dynamic来实现反射,看看性能如何
class Program
{
static void Main(string[] args)
{
dynamic dynamicSample = new DynamicSample();
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < 100000; i++)
{
int re = dynamicSample.Add(1, 2);
}
watch.Stop();
Console.WriteLine(watch.ElapsedMilliseconds);//50毫秒左右
Console.Read();
}
}
public class DynamicSample
{
public string Name { get; set; }
public int Add(int a, int b)
{
return a + b;
}
}
不仅代码变少了, 而且性能也提高了一个数量级,所有,大家能用动态属性实现反射的情况下建议都用动态属性来试下!
张孝祥老师于2011年12月31日在北京不幸急病突发意外逝世,终年38岁,张孝祥追悼会将于2012年1月4日上午7时开始,在北京八宝山兰厅举行。
听到这个消息,真的挺震惊的,张老师的java视频还是挺受大家的欢迎的,可没想到,居然就这么去世了,真是天妒英才啊。
本不是技术文章不想发首页的,但是,为了大家着想,还是望大家多看看,身体才是革命的本钱,望广大园友好好珍惜自己的身体,不要以为年轻就不当回事!
虽然我们不用日晒雨淋,但是我们每天都要面对着电脑,“享受”着各种辐射,坐在位置上也许一坐就是十来个小时不动弹。记得开始有张程序员肚子变化的图片的,找了下没找着,反正就是随着编程时间越来越久,你的肚子越来越大。
所以园友们,给大家几点建议:
1、在能不加班的时候就尽量早点休息,一天中最佳的休息时间:晚上10点到凌晨2点,是身体修复,保养皮肤的重要时段;凌晨1点到3点,是养肝的时间;3点到5点,是养肺的时间;5点到7点养大肠.争取早睡晚起,那是最好的了。
2.上班时,为了减少辐射,可以在电脑旁放一盆仙人掌,或者多喝点绿茶,这样能够减少电脑带给你的辐射危害。
3.每个星期一定要有那么几天,坚持锻炼,比如说晚上慢跑慢跑,或者休息的时候去打打球之类的,那样保证身体的强壮,不会由于突然的运动而感觉到很累,这样也能调节好自己的身体。
4.很多程序员喜欢方便,于是就经常吃方便面,或者之类的垃圾食品,而且饮食会很不规律,经常早上不吃早点或者晚上很晚又要吃夜宵,劝一句 ,不是逼不得已,还是调整好自己的一日三餐,让其变得有规律,不要因为code而忘记了吃饭!
5.每天不要一直坐着电脑旁一动不动,一两个小时就起来走动走动,活动下筋骨,尤其是颈部,不然很容易患肩周炎的。
2012的第一天!最后还是希望大家能够身体倍儿棒,技术进步!