2016年1月29日

简化代码的微小修改

摘要: 可选参数和命名实参 可选参数 如果操作需要多个值,而有些值在每次调用的时候又相同,这时可以使用可选参数 声明可选参数并在调用时省略它们 #region 13-1声明包含可选参数的方法并调用 static void Dump(int x, int y = 20, int z = 30)//声明包含了可 阅读全文

posted @ 2016-01-29 15:49 Mr.Tan& 阅读(216) 评论(0) 推荐(0) 编辑

查询表达式和LINQ to Objects

摘要: 查询表达式实际上是由编译器“预处理”为“普通”的C#代码,接着以完全普通的方式进行编译。这种巧妙的发式将查询集合到了语言中,而无须把语义改得乱七八糟 LINQ的介绍 LINQ中的基础概念 降低两种数据模型之间的阻抗失配过程中,遇到的一个问题就是,通常会涉及创建另一个模型来作为桥梁 序列 它通过IEn 阅读全文

posted @ 2016-01-29 15:48 Mr.Tan& 阅读(280) 评论(0) 推荐(0) 编辑

Lambda表达式和Lambda表达式树

摘要: LINQ的基本功能就是创建操作管道,以及这些操作需要的任何状态。 为了富有效率的使用数据库和其他查询引擎,我们需要一种不同的方式表示管道中的各个操作。即把代码当作可在编程中进行检查的数据。 Lambda表达式不仅可以用他们创建委托实例,而且C#编译器也能将他们转换成表达式树——用于表示Lambda表 阅读全文

posted @ 2016-01-29 15:47 Mr.Tan& 阅读(1450) 评论(0) 推荐(2) 编辑

扩展方法

摘要: 未引入扩展方法之前的状态 #region 10-1为流提供附加功能的一个简单的工具类 public static class StreamUtil { const int BufferSize = 8192; public static void Copy(Stream input, Stream 阅读全文

posted @ 2016-01-29 15:47 Mr.Tan& 阅读(221) 评论(0) 推荐(0) 编辑

用智能的编译器来防错

摘要: 自动实现的属性 编写由字段直接支持的简单属性,不再显得臃肿不堪 C#2允许为取值方法指定不同的访问权限 #region 8-1统计创建了多少个实例的Person类 public class Person { public string Name { get; private set; }//声明有公 阅读全文

posted @ 2016-01-29 15:46 Mr.Tan& 阅读(191) 评论(0) 推荐(0) 编辑

结束C#2的讲解:最后的一些特性

摘要: 分部类型 可以在多个源文件中为一个类型编写代码。特别适合用于部分代码是自动生成,而其他部分的代码为手动类型。 多个源代码文件组成的类型为分部类型 #region 7-1演示分部类型的混合声明 partial class Example<TFirst, TSecond> : IEquatable<st 阅读全文

posted @ 2016-01-29 15:45 Mr.Tan& 阅读(173) 评论(0) 推荐(0) 编辑

实现迭代器的捷径

摘要: 迭代器模式是行为模式的一种范例,行为模式是一种简化对象之间通信的设计模式。它允许你访问一个数据序列中的所有元素,而无须关心序列是什么类型。它能有效的构建一个数据管道,经过一系列不同的转换或过滤后再从管道的另一端出来。(也是LINQ核心模式之一) 迭代模式是通过IEnumerator和IEnumera 阅读全文

posted @ 2016-01-29 15:45 Mr.Tan& 阅读(226) 评论(0) 推荐(0) 编辑

进入快速委托通道

摘要: 笨拙的委托语法 C#1中,先写好一连串事件处理程序,然后写new EventHandler。 #region 5-1 Button button = new Button(); button.Text = "Click me"; button.Click += new EventHandler(Lo 阅读全文

posted @ 2016-01-29 15:44 Mr.Tan& 阅读(202) 评论(0) 推荐(0) 编辑

可空类型

摘要: 值类型变量不能为null 对于一个引用类型变量来说,其值是一个引用,而值类型是它的真实数据。 一个非空引用值提供一个访问对象的途径,null相当于一个特殊的值。 内存中用全零来表示null,清除一整块内存开销最低,所以对象选择用这种方式来初始化,本质上是和其他引用一样的方式来存储的。 在C#1种表示 阅读全文

posted @ 2016-01-29 15:43 Mr.Tan& 阅读(1758) 评论(0) 推荐(0) 编辑

用泛型实现参数化类型

摘要: 泛型将大量安全检查从执行时转移到了编译时进行,泛型实现了类型和方法的参数化。 为什么需要泛型 将额外的信息作为方法或类型声明的一部分加以说明 IDE能基于额外的信息向程序员提供智能感知 方法调用者对自己传递的值和方法返回值更有把握 维护代码时,可以更好的掌握代码思路 日常使用的简单泛型 泛型字典 s 阅读全文

posted @ 2016-01-29 15:42 Mr.Tan& 阅读(1788) 评论(0) 推荐(0) 编辑

C#1所搭建的核心基础

摘要: 一,委托 委托封装了包含特殊返回类型和一组参数的行为,类似包含单一方法接口。 委托类型声明中所描述的类型签名决定了哪个方法可以用于创建委托实例,同时决定了调用的签名:委托类型实际上只是参数类型的一个列表以及一个返回类型 创建委托实例,需要一个方法已经调用该方法的目标: void Invoke(str 阅读全文

posted @ 2016-01-29 15:39 Mr.Tan& 阅读(200) 评论(0) 推荐(0) 编辑

导航