雁过请留痕...
代码改变世界

Linq学习之旅——LINQ查询表达式

2012-07-28 22:01 by xiashengwang, 45343 阅读, 19 推荐, 收藏, 编辑
摘要:目录 1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. 概述 LINQ的全称是Language Integrated Query,中文译成“语言集成查询”。 阅读全文

C# 3.0 新特性概览

2012-07-23 22:33 by xiashengwang, 598 阅读, 1 推荐, 收藏, 编辑
摘要:1. 隐式类型局部变量(Implicitly Typed Local Variables)隐式类型局部变量的具体类型取决于初始化它的表达式。在一个局部变量声明时,前面加一个var关键字,这个局部变量就被叫做隐式类型局部变量。例如: var i = 0; var s = "Hello"; var d = 1.0; var numbers = new int[] { 2, 4, 7, 8 }; var order = new Dictionary<string, string>();上... 阅读全文

《CLR via C#》笔记——可空值类型

2012-07-20 18:15 by xiashengwang, 457 阅读, 0 推荐, 收藏, 编辑
摘要:一,可空值类型 顾名思义,这种类型支持null值。在FCL中被定义为System.Nullable类型。这是一个结构体类型(struct),所以,不要认为System.Nullable是一个引用类型,它仍然是一个值类型。要使用可空值类型,在代码中可以这样写: Nullable x = 10; Nullable y = null; Console.WriteLine("x: HasValue={0} Value={1}", x.HasValue, x.Value); Console.WriteLine("y:... 阅读全文

《CLR via C#》笔记——线程基础

2012-07-20 14:22 by xiashengwang, 1400 阅读, 4 推荐, 收藏, 编辑
摘要:一,Windows为什么要支持线程 进程(process)是应用程序的一个实例要使用的资源的一个集合。每个进程都有一个虚拟化的地址空间,确保一个进程的代码不会被另外一个进程访问,这确保了应用程序的健壮性和安全性。但当应用程序执行一个无限循环,系统中又只有一个CPU时,他会执行无限循环,不能执行其他东西。为此,Mircorsoft引入了线程。线程(thread)的职责就是对CPU进行虚拟化,Windows为每个进程提供了该进程专用的线程。如果应用程序进入无限循环,与代码相关的进程会被“冻结”,但其他进程可以继续执行。二,线程开销线程会产生空间和时间上的开销。每个线程都包含以下要素:●线程内核对象 阅读全文

《CLR via C#》笔记——运行时序列化(3)

2012-07-18 20:54 by xiashengwang, 942 阅读, 0 推荐, 收藏, 编辑
摘要:七,流上下文 前面讲过,一组序列化好的对象可以有许多的目的地;同一进程,同一台机器的不同进程,不同机器的不同进程等。在一些比较少见的情况下,一个对象可能想知道他要在什么地方被反序列化,从而以不同的方式生成它的状态。例如:一个包装了Windows信号量(semaphore)的一个对象,如果它知道反序列化到同一个进程中,就可能决定序列化它的内核句柄(kernel handle),这是因为内核句柄在同一进程中有效。然而,如果它知道要反序列化到同一机器的不同进程中,就可能对信号量的字符串名称进行序列化。最后,如果对象知道它要反序列化到一台不同的机器上的一个进程中,就可能抛出异常,因为信号量值在同一台机 阅读全文

《CLR via C#》笔记——运行时序列化(2)

2012-07-18 20:52 by xiashengwang, 1422 阅读, 0 推荐, 收藏, 编辑
摘要:五,格式化器如何序列化类型实例为了简化格式化的操作,FCL在System.Runtime.Serialization命名空间提供了一个FormatterServices类型。该类型只包含静态方法,而且不能被实例化。以下的步骤描述了格式化器如何自动序列化一个应用了SerializableAttribute的对象。1,格式化器调用FormatterServices的GetSerializableMembers方法:public static MemberInfo[] GetSerializableMembers(Type type,StreamingContext context)这个方法利用反射 阅读全文

《CLR via C#》笔记——运行时序列化(1)

2012-07-18 20:43 by xiashengwang, 1069 阅读, 1 推荐, 收藏, 编辑
摘要:一,运行时序列化的作用序列化(Serialization)是将一个对象转换成一个字节流的过程。反序列化(Deserialization)是将一个字节流转换回一个对象的过程。在对象和字节流之间的转化是非常有用的机制。下面是一些例子。●应用程序的状态可以轻松保存到一个磁盘或数据库中,并在应用程序下次运行时恢复。Asp.net就是利用序列化和反序列化来保存和恢复会话状态的。●一组对象可轻松复制到剪贴板,在粘贴回同一个或另一个应用程序。事实上,Windows窗体和WPF就是利用了这个功能。●一组对象可以克隆放到一边作为“备份”;与此同时,用户操纵一组“主”对象。●一组对象可轻松地通过网络发给另一台机器 阅读全文

《CLR via C#》笔记——AppDomain(2)

2012-07-17 09:22 by xiashengwang, 2224 阅读, 0 推荐, 收藏, 编辑
摘要:四,卸载AppDomain AppDomain很出色的一个能力就是它允许卸载。卸载AppDomain会导致CLR卸载AppDomain中的所有程序集,还会释放AppDomain的Loader堆。为了卸载一个AppDomain,可以调用AppDomain的静态方法UnLoad,这将导致CLR执行一系列的操作来卸载AppDomain。1,CLR挂起进程中执行过托管代码的所有线程。2,CLR检查所有线程栈,查看哪些线程正在执行要卸载的那个AppDomain中的代码,或者哪些线程会在某个时候返回至要卸载的那个AppDomain。在任何一个栈上,如果有准备卸载的AppDomain,CLR都会强迫对应的线 阅读全文

《CLR via C#》笔记——AppDomain(1)

2012-07-17 09:13 by xiashengwang, 4291 阅读, 1 推荐, 收藏, 编辑
摘要:一,Appdomain概述 CLR COM服务器初始化时,会创建一个AppDomain。AppDomain是一组程序集的逻辑容器。宿主可以通过CLR创建额外的AppDomain。AppDomain的唯一作用就是隔离。下面是它的具体功能。●一个AppDomain中的代码创建的对象不能由另一个AppDomain中的代码直接访问。●AppDomain可以卸载。●AppDomain可以单独保护。AppDomain在创建后,会应用一个权限集,它决定了在这个AppDomain中运行的程序集的最大权限。●AppDomain可以单独实施配置。AppDomain在创建后,会关联一组配置设置。这些设置主要影响CL 阅读全文

《CLR via C#》笔记——程序集的加载和反射(3)

2012-07-16 17:54 by xiashengwang, 1489 阅读, 0 推荐, 收藏, 编辑
摘要:五,使用反射发现类型的成员1,发现类型成员 字段,构造器,方法,属性,事件和嵌套类都可以被定义为类型的成员。FCL定义了一个System.Reflection.MemberInfo的抽象基类,封装了一组所有类型成员都通用的属性。从MemberInfo派生的一组类,每个类都封装了与一个特定类型成员相关的属性。下面是这个类型的层次结构。下面的程序演示如何查询一个类型的成员并显示与它们相关的信息。以下代码中,处理AppDomain中加载的所有程序集中的公共类型,对每个类型,调用GetMembers方法,并返回由MemberInfo派生对象构成的一个数组;对每个成员都显示他们的种类(字段,构造器,方法 阅读全文