代码改变世界

NHibernate Tips

2011-08-28 23:15 by 小郝(Kaibo Hao), 328 阅读, 0 推荐, 收藏, 编辑
摘要:This article is about the tips of NHibernate which includes: 1. Nhibernate mapping config file build action 2. Avoid redundant mappings 3. Use natural key to present the identification in real world 4. Use surrogate key for Identification of the physical record in the database. 5. Lazy Loading requirements 阅读全文

Effective C# 学习笔记(四十九)创建符合CLS标准的程序集

2011-08-20 22:38 by 小郝(Kaibo Hao), 605 阅读, 1 推荐, 收藏, 编辑
摘要:符合CLS(Common Language Subsystem)标准的程序集可以被其他跑在CLR的语言公用,这是.NET的一个引以为傲的特性,这样你用一种语言编写的程序集就可以被其他在CLR同样支持的程序调用了。要实现这个效果,要求更多的时间来设计构建你的程序集。主要要求两点:1. 所有public和protected的成员方法的参数和返回值必须是符合CLS标准的。2. 所有不符合CLS标准的public和protected成员方法,都应有符合CLS标准的方法来代替。实现CLS标准的程序集可以被其他运行在CLR平台的语言调用,但是要付出一点设计和构建的努力。当然,也不是说你所有的程序集都要为了这个目标去构建,你只需在需要多语言交互的接口使用符合CLS标准来构建就可以了,把转换封装到接口中,这样产出比还是很可以接受的。 :) 阅读全文

关于Parallel & MultiThread Programming的一些总结

2011-08-17 22:41 by 小郝(Kaibo Hao), 395 阅读, 1 推荐, 收藏, 编辑
摘要:本文收录了关于多线程和并行编程在.NET 4.0中的新特性介绍,都出自MSDN,以后还会更新,希望对大家有所帮助 :) 阅读全文

Effective C# 学习笔记(四十八)使用安全代码

2011-08-07 10:04 by 小郝(Kaibo Hao), 497 阅读, 2 推荐, 收藏, 编辑
摘要:.NET 运行时保证了恶意代码不可在远程设备上(即跨Internet、Intranet)执行,但一些分布式部署的应用需要执行远程操作。若CLR不信任某个程序集,它就不会执行程序集的某个操作,这种行为叫做CAS(Code access security)。CLR执行基于角色的权限控制。这种控制是在运行时校验的,编译时无法强制检验,而且在你的开发机上也很难发现这些权限控制的约束,因为你硬盘上的代码拥有较高的执行权限。在处理此类非安全代码时,原则是首先看能否通过其他方式不去访问这些受保护的资源;若必须使用,则将这些代码放到一个独立的程序集中。 阅读全文

Effective C# 学习笔记(四十七)对异常进行strong guarantee 策略处理

2011-08-06 22:13 by 小郝(Kaibo Hao), 476 阅读, 3 推荐, 收藏, 编辑
摘要:异常处理的三种策略:Basic guarantee:在抛出异常前,保证所有资源没有溢出,而且各个对象属性状态是合法状态; Strong guarantee:基于Basic guarantee,其强调对象的属性状态还原为失败修改前的状态。(该策略确保了从异常中修复和简化异常处理操作); No throw Exception guarantee:在方法中不抛出异常,所有的错误都在该方法中处理。 阅读全文

Effective C# 学习笔记(四十六)对异常进行分类并逐类处理

2011-08-06 22:05 by 小郝(Kaibo Hao), 366 阅读, 2 推荐, 收藏, 编辑
摘要:对于异常的认识 1. 异常并不是包括所有错误条件 2. 抛出的异常最好是有定义的针对特殊类别的异常类型,不要总是使用System.Exception来处理异常,这样你可以针对不同的异常进行不同的Catch操作。可以从以下方面定义(这里只是抛砖引玉): a. 找不到文件或目录 b. 执行权限不足 c. 丢失网络资源 阅读全文

Effective C# 学习笔记(四十五)减少装箱拆箱行为

2011-08-06 10:35 by 小郝(Kaibo Hao), 592 阅读, 2 推荐, 收藏, 编辑
摘要:值类型用来存储数据,引用类型用来表现多态,而所有.net framework中的类型都继承自System.Object。这看起来有些冲突。.NET framework 用装箱和拆箱来解决两类类型间的转换。但是这种操作是十分消耗资源且影响性能的。 装箱:把一个值类型放入一个未命名的引用类型中,以使得该类型可被当作引用类型使用。 拆箱:从一个引用类型中将值类型的值Copy取出。 阅读全文

Effective C# 学习笔记(四十四)合理地在C#中使用Dynamic特性

2011-08-05 20:13 by 小郝(Kaibo Hao), 461 阅读, 2 推荐, 收藏, 编辑
摘要:尽管C# 4.0中添加了 Dynamic特性,但是本质上说C#还是一个静态语言。而过多的使用动态特性会是你的程序难于维护,易于出错,所以我们要讲一个“度”字。 原则是:在必须使用Dynamic的时候使用之,但将使用Dynamic的逻辑的地方用静态类型的方式封装起来供外界调用。(如使用范型转换Dynamic类型) 阅读全文

Effective C# 学习笔记(四十三)使用Expression处理绑定(属性值更改)事件

2011-08-04 21:59 by 小郝(Kaibo Hao), 781 阅读, 2 推荐, 收藏, 编辑
摘要:DataBinding的实现原理是当其绑定的属性的值发生变化时将触发属性值改变事件,以调用数据绑定值改变后应触发的逻辑(如更新GridView列表中的数据展现)。其每个属性更改的区分是通过属性的名称来唯一标识的。这样的方法不利于代码的重构,也容易引起书写错误导致不易排查的运行时错误。使用Expression API和反射原理可以帮你解决属性变更触发事件的通用逻辑与属性名称之间的耦合。其实,LINQ TO SQL及 Entity Framework就是构建在System.Linq.Expression的API上的。 阅读全文

Effective C# 学习笔记(四十二)理解Expression API的使用方式

2011-08-03 22:49 by 小郝(Kaibo Hao), 679 阅读, 2 推荐, 收藏, 编辑
摘要:.NET原来就拥有反射的机制来处理运行时的代码动态构建与使用。但这种代码的构建比较复杂,难以维护。而C#的LINQ和Dynamic支持使这个特性更加简单和容易使用。那就是使用Expression 表达式来为运行时提供动态业务逻辑。 阅读全文

Effective C# 学习笔记(四十一)使利用DynamicObject或IDynamicMetaObjectProvider接口实现数据驱动的动态类型

2011-08-02 17:18 by 小郝(Kaibo Hao), 2340 阅读, 2 推荐, 收藏, 编辑
摘要:实现动态行为可以帮助解决你编程实践中遇到的各种挑战。当要创建动态类型时,首先判断是否可以通过集成System.Dynamic.DynamicObject来实现。若不能通过继承的方式实现,就要实现IDynamicMetaObjectProvider接口,通过创建继承自DynamicMetaObject类型的嵌套类并重载其对应方法来实现对你要创建的动态类型的属性访问、方法调用等各种动态行为。其中用到了较为复杂的Expression定义,这层抽象较难理解,也较容易出错,请注意这部分逻辑的覆写。另外,用你自己的动态逻辑也要考虑的性能损失的问题,因为动态编程本来就要比静态编程消耗更多的资源,有得必有失么:) 阅读全文

Effective C# 学习笔记(四十)使用Dynamic处理匿名类型参数

2011-07-30 20:52 by 小郝(Kaibo Hao), 872 阅读, 1 推荐, 收藏, 编辑
摘要:有时你需要在你的方法的参数或返回值中使用匿名类型,而编译器不允许你这么使用匿名类型。你可以使用范型方法,或使用System.Object类型做参数来处理这种问题。但有时你又需要一些特定类型的行为特性来完成你的逻辑,而这个特定类型又不完全被你所掌握,这时你就需要使用Dynamic来处理这个问题。 阅读全文

Effective C# 学习笔记(三十九) 使用Dynamic处理范型参数的运行时类型

2011-07-29 19:35 by 小郝(Kaibo Hao), 387 阅读, 1 推荐, 收藏, 编辑
摘要:由于Enumerable.Cast方法,其对T类型所知范围仅限于Sytem.Object类型的那些方法,所以对于T类型的特殊类型转换方法(无论是Implicit还是Explicit的)其都不会理睬。所以在使用运行时类型枚举转换时请注意使用适当的方法。 阅读全文

Effective C# 学习笔记(三十八)理解Dynamic的得与失

2011-07-28 22:35 by 小郝(Kaibo Hao), 467 阅读, 2 推荐, 收藏, 编辑
摘要:Dynamic是C#4.0新增的特性,其可以使我们完成一些在运行时的动态类型逻辑定义。但是其是一把双刃剑,在带来动态特性以应付多变处理需求的同时,也带来了更多需要校验处理的地方,不能在编译时发现程序的漏洞。而且在运行时由于对类型转换的相关处理,要比静态类型处理逻辑更费资源和时间。 阅读全文

Effective C# 学习笔记(三十七) 警惕并行处理中的异常处理

2011-07-26 23:57 by 小郝(Kaibo Hao), 568 阅读, 3 推荐, 收藏, 编辑
摘要:若一个异常到达了调用该线程的方法时,该线程也就终止运行了。而并行编程使用AggregateException类型来处理发生在子线程中的各类异常,而这些异常存储在AggregateException对象的InnerExceptions属性中。处理异常策略的原则是:处理你能恢复到正常状态的异常,抛出其他那些异常。 阅读全文

Effective C# 学习笔记(三十六) 理解PLINQ对IO上瓶颈的处理方式

2011-07-23 21:04 by 小郝(Kaibo Hao), 542 阅读, 3 推荐, 收藏, 编辑
摘要:IO操作一般会成为程序性能的瓶颈,我们可以用并行的方式来提高该方面的操作效率。 阅读全文

Effective C# 学习笔记(三十五) 了解PLINQ如何实现并行算法

2011-07-21 22:11 by 小郝(Kaibo Hao), 500 阅读, 2 推荐, 收藏, 编辑
摘要:AsParallel() 是PLINQ的一个方法,它使得并行编程变得简单,但是其并不能解决并行编程中的所有问题。本文对利用PLINQ来进行并行编程的内部机制来进行解析。 阅读全文

Effective C# 学习笔记(三十四)避免在子类中重载父类的方法

2011-07-18 12:48 by 小郝(Kaibo Hao), 556 阅读, 1 推荐, 收藏, 编辑
摘要:如题,在子类中重载(overload)父类的方法会给你类的客户分不清同样的方法名在运行时到底运行的是哪个类的方法,而且对于C#4.0前后版本的逆变协变支持的不同,你的重载(对于带范型参数的方法)也会有截然相反的结果,所以还是尽量不要再子类中重载父类中的方法。 首先,要分清orverload和override两个单词的中文解释。 overload为重载即表示方法通过参数个数、参数类型的不同对同名方法的另一逻辑实现,等于创建了一个新的同名方法,与原有方法并存。 override为覆写,顾名思义就是覆盖掉父类同名方法,形参列表是与父类一致的。 阅读全文

Effective C# 学习笔记(三十三) 只在更新基类时,使用new关键字

2011-07-18 12:44 by 小郝(Kaibo Hao), 307 阅读, 2 推荐, 收藏, 编辑
摘要:对于new关键字在修饰方法的使用我们要小心,因为它并不是像看上去那样会把父类nonVirtual的方法,转为virtual方法。 阅读全文

Effective C# 学习笔记(三十二)避免使用ICloneable接口

2011-07-17 23:34 by 小郝(Kaibo Hao), 336 阅读, 2 推荐, 收藏, 编辑
摘要:实现ICloneabl接口听起来很美,不是么?还真不是,你要是为某个类实现了ICloneable接口,你就得为它的子类和相关的深拷贝和浅拷贝担心,注意每一属性的可被复制的深浅及其被复制的必要性。这看起来是多么大的一个工程,也许远远超出你的想象。 阅读全文
上一页 1 ··· 4 5 6 7 8 9 10 11 下一页