05 2017 档案
摘要:.NET 4.5 中包含取消架构,允许以标准方式取消长时间运行的任务。每个阻塞调用都应支持这种机制。但目前,并不是所有阻塞调用都实现了这个新技术。已经实现了这种机制的技术有任务(http://www.cnblogs.com/afei-24/p/6907840.html),并发集合类(http://w
阅读全文
摘要:Parallel类(http://www.cnblogs.com/afei-24/p/6904179.html)的并行任务需要结束后才能运行后面的代码,如果想不等结束后在开始动作,可以使用Task类更好地控制并行动作。 任务表示应完成的某个工作单元。这个工作单元可以在单独的线程中运行,也可以以同步方
阅读全文
摘要:Parallel类是对线程的一个抽象。该类位于System.Threading.Tasks名称空间中,提供了数据和任务并行性。 Paraller类定义了数据并行地For和ForEach的静态方法,以及任务并行的Invoke的静态方法。Parallel.For()和Parallel.ForEach()
阅读全文
摘要:C#反射技术主要基于System.Type类和System.Reflection.Assemble类,通过Type类可以访问关于任何数据类型的信息,Assemble类用于访问给定程序集的相关信息,或把这个程序集加载到程序中。 一.System.Type类 Type类是一个抽象类。只要实例化了一个Ty
阅读全文
摘要:在前面介绍的代码中有使用特性,这些特性都是Microsoft定义好的,作为.NET Framework类库的一部分,许多特性都得到了C#编译器的支持。 .NET Frmework也允许定义自己的特性。自定义特性允许把自定义元数据与程序元素关联起来。这些元数据是在编译过程中创建的,并嵌入到程序集中。这
阅读全文
摘要:一.并行LINQ System.Linq名称空间中包含的类ParallelEnumerable可以分解查询的工作,使其分布在多个线程上。 尽管Enumerable类给IEnumerable<T>接口定义了扩展方法,但ParallelEnumerable类的大多数扩展方法是ParallerQuery<
阅读全文
摘要:本文主要介绍LINQ查询操作符 LINQ查询为最常用的操作符定义了一个声明语法。还有许多查询操作符可用于Enumerable类。 下面的例子需要用到LINQ基础(一)(http://www.cnblogs.com/afei-24/p/6841361.html)的一些代码 1.筛选 LINQ查询使用w
阅读全文
摘要:LINQ(Language Integrated Query,语言集成查询),在C#语言中集成了查询语法,可以用相同的语法访问不同的数据源。 LINQ提供了不同数据源的抽象层,所以可以使用相同的语法。 这里主要介绍LINQ的核心原理和C#中支持C# LINQ查询的语言扩展。 1.语法 使用LINQ查
阅读全文
摘要:.NET 4 开始,在System.Collection.Concurrent中提供了几个线程安全的集合类。线程安全的集合可防止多个线程以相互冲突的方式访问集合。 为了对集合进行线程安全的访问,定义了IProducerConsumerCollection<T>接口。这个接口中最重要的方法是TryAd
阅读全文
摘要:如果对象可以改变其状态,就很难在多个同时运行的任务中使用。这些集合必须同步。如果对象不能改变器状态,就很容易在多个线程中使用。 Microsoft提供了一个新的集合库:Microsoft Immutable Collection。顾名思义,它包含不变的集合类————创建后不能改变的集合类。该类在Sy
阅读全文
摘要:如果需要处理的数字有许多位,就可以使用BitArray类和BitVector32结构。BitArray类位于System.Collection,BitVector32结构位于System.Collection.Specialized。 这两种类型最重要的区别是,BitArray类可以重新设置大小,如
阅读全文
摘要:如果需要集合中的元素何时删除或添加的信息,可以使用ObservableCollection<T>类。这个类是为WPF定义的,这样UI就可以得知集合的变化。这个类在程序集WindowsBase中定义,需要引用这个程序集。 ObservableCollection<T>类派生自Collection<T>
阅读全文
摘要:包含不重复元素的集合称为“集(set)”。.NET Framework包含两个集HashSet<T>和SortedSet<T>,它们都实现ISet<T>接口。HashSet<T>集包含不重复元素的无序列表,SortedSet<T>集包含不重复元素的有序列表。 ISet<T>接口提供的方法可以创建合集
阅读全文
摘要:字典表示一种复杂的数据结构,这种数据结构允许按照某个键来访问元素。字典也称为映射或散列表。 字典的主要特性是能根据键快速查找值。也可以自由添加和删除元素,这有点像List<T>(http://www.cnblogs.com/afei-24/p/6824791.html),但没有在内存中移动后续元素的
阅读全文
摘要:如果需要基于键对所需集合排序,就可以使用SortedList<TKey,TValue>类。这个类按照键给元素排序。这个集合中的值和键都可以使用任何类型。定义为键的自定义类型需要实现IComparer<T>接口,用于给列表中的元素排序。 使用构造函数创建一个有序列表,在用Add方法添加: var bo
阅读全文
摘要:LinkedList<T>是一个双向链表,其元素会指向它前面和后面的元素。这样,通过移动到下一个元素可以正向遍历链表,通过移动到前一个元素可以反向遍历链表。 链表在存储元素时,不仅要存储元素的值,还必须存储每个元素的下一个元素和上一个元素的信息。这就是LinkedList<T>包含LinkedLis
阅读全文
摘要:栈(Stack)和队列是非常类似的一个容器,只是栈是一个后进先出(LIFO)的容器。 栈用Push()方法在栈中添加元素,用Pop()方法获取最近添加的一个元素: Stack<T>与Queue<T>类(http://www.cnblogs.com/afei-24/p/6829817.html)类似,
阅读全文
摘要:队列是其元素按照先进先出(FIFO)的方式来处理的集合。 队列使用System.Collections.Generic名称空间中的泛型类Queue<T>实现。在内部,Queue<T>类使用T类型的数组,这类似List<T>(http://www.cnblogs.com/afei-24/p/68247
阅读全文
摘要:数组(http://www.cnblogs.com/afei-24/p/6738128.html)的大小是固定的。如果元素的个数是动态的,就应使用集合类。 列表(http://www.cnblogs.com/afei-24/p/6824791.html) 队列(http://www.cnblogs.
阅读全文
摘要:.NET Framework为动态列表List提供泛型类List<T>。这个类实现了IList,ICollection,IEnumerable,IList<T>,ICollection<T>,IEnumerable<T>接口。1.创建列表 创建一个赛车手类,下面的例子会用到: 调用默认的构造函数,就
阅读全文
摘要:事件基于委托,可以为任何一种委托类型提供一种发布\订阅机制。 使用event关键字将一个委托类型定义为事件。 下面通过一个例子介绍事件: 客户端代码: 事件就是一个特殊的委托(http://www.cnblogs.com/afei-24/p/6762442.html),它是一个用于事件驱动模型的专用
阅读全文
摘要:从C#3.0开始,可以使用lambda表达式把实现代码赋予委托。lambda表达式与委托(http://www.cnblogs.com/afei-24/p/6762442.html)直接相关。当参数是委托类型时,就可以使用lambda表达式实现委托引用。 lambda运算符“=>” 的左边是参数列表
阅读全文