关于根据Build Platform或者OS 加载x86或者x64 dll的问题
摘要:最近编程遇到引用SQLite.dll的问题。SQLite.dll有两个版本,x86和x64,如果仅仅是自己的环境使用,那么添加对应版本的引用,那是完全没有问题的。但是一旦程序要发布出去,或者在不用的平台环境上使用,那么这么做就存在隐患了。最终就需要根据不同系统环境来加载dll。 首先,是判...
阅读全文
Effective C#:使用Conditional特性而不是#if条件编译
摘要:#if/#endif语句在日常编程中经常会被用到,尤其是想要基于同一份源代码生成不同的编译结果,eg.debug版和release版.但是我们经常遇到的情况是,#if/#endif成为一种习惯的时候,就会被无限制的滥用,代码进而难以理解或调试。所以,在需要编写条件代码块的时候,提倡使用Conditional特性代替#if条件编译。 #if条件语句 1.#if条件是存在于方法体内的,在方法实现的过程中,对应具体的条件限制,添加检查操作。 public void Func(){ string msg = null;#if DEBUG msg = GetDiagnosti...
阅读全文
Effective C#:推荐使用is或as操作符而不是强制类型转换
摘要:C#是一种强类型的语言。在编程的过程中,我们都不可避免的会碰到类型转换的问题。这时,我们有两个选择:使用as操作符,或者使用强制类型转换。更保险的做法,首先使用is测试一下转换能否成功,然后再用as或强制类型转换。 正确的做法是,尽可能地使用as操作符,因为相当于强制类型转换来说,as更加安全,也更加高效。不过,as和is操作符都不会执行任何用户自定义的转换,它们仅当运行时类型符合目标类型时才能转换成功,也不会在转换时创建新的对象。 //Version one object castObj = Factory.GetObject();/...
阅读全文
Effective C#:使用属性而不是可访问的数据成员
摘要:在工作中,经常被约定俗成的一条就是,使用属性进行数据操作,而不是使用字段。普遍的操作都是属性公有,字段私有。当然,这种约定俗成的要求也是有意义的。 字段,仅仅是作为数据访问;属性,则是创建出类似于数据访问,但是实际上却是方法调用的接口。访问属性的时候,就像访问公有的字段,不过其底层实质却是方法实现,你可以自由定义属性访问器的行为。下面就总结下属性比字段强大的地方: 1.属性易于修改 对于学校来说,每一位学生的姓名都不可能为空,那么对于属性而言,只需要在Set方法添加判断即可。 public class Student { private string...
阅读全文
Effective C#:避免使用ICloneable接口
摘要:最近在学习Bill Wagner的书籍:《Effective C#:50 Specific Ways to Improve Your C#》,虽然是一本很早的书了,但是感觉很实用,并且跟国内出版的许多“提高代码质量的XXX条建议"之类的书籍相比,其实大部分的解释都大同小异,所以准备以此为基础,决定对学习过程中的理解做一些记录。 ICloneable接口,在MSDN上的解释很简单:支持克隆,即创建一个与原实例拥有相同成员值的新实例副本。ICloneable接口只有一个成员方法,Clone()。一切看起来没有什么复杂的,但是使用过该接口之后,你就会发现潜藏的问题不少。 既然是对对象的..
阅读全文