02 2013 档案
摘要:逆变(contravariant)与协变(covariant)是C#4新增的概念,许多书籍和博客都有讲解,我觉得都没有把它们讲清楚,搞明白了它们,可以更准确地去定义泛型委托和接口,这里我尝试画图详细解析逆变与协变。 变的概念 我们都知道.Net里或者说在OO的世界里,可以安全地把子类的引用赋给父类引用,例如: //父类 = 子类string str = "string";object obj = str;//变了而C#里又有泛型的概念,泛型是对类型系统的进一步抽象,比上面简单的类型高级,把上面的变化体现在泛型的参数上就是我们所说的逆变与协变的概念。通过在泛型参数上使用in或
阅读全文
摘要:最近搞一个系统时由于在比较关键地方用到反射了,所以要关注了一下反射的性能问题。搜索一下,不难搜到老赵的这篇文章,下面是一些杂乱的笔记。(建议先看老赵的文章) .Net4.0反射性能改善 看老赵的文章,老赵得到的结果是这样的: 00:00:00.0125539 (Directly invoke)00:00:04.5349626 (Reflection invoke)00:00:00.0322555 (Dynamic executor)而我把代码搞下来自己运行得到这样的结果:00:00:00.0009710 (Directly invoke)00:00:00.4142893 (Reflect...
阅读全文
摘要:上一篇使用Task简化Silverlight调用Wcf介绍了Silverlight下使用Task的一些方法,这篇继续改进一下。 改进生成工具的生成的方法 上次生成的代码如下,这些TaskAsync只是简单的包装一下Wcf的begin和end方法: public Task DoWorkTaskAsync(){ return Task.Factory.FromAsync(this.Channel.BeginDoWork, this.Channel.EndDoWork, null);}public Task<DateTime> GetSerivceTimeTaskAsync(){ ...
阅读全文