随笔分类 - C#
摘要:C#中的虚方法Virtual 一、简介 虚拟函数从C#的程序编译的角度来看,它和其它一般的函数有什么区别呢?一般函数在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的,也就是写死了的!而虚函数在编译期间是不被静态编译的,它的相对地址是不确定的,它会根据运行时期对象实例来动态判
阅读全文
摘要:LINQ基础—Distinct子句 一、简介 Distinct返回的序列包含输入序列的唯一元素,该语句是单个集合操作。 二、案例 List<int> list = new List<int>() {1,2,3,3,3}; var result = list.Distinct(); Result的结果
阅读全文
摘要:LINQ基础—Except子句 一、简介 Except返回差集,差集是指位于一个集合但不位于另一个集合的元素。Except是把第一个集合里面的数据 去掉在第二个集合里面出现过的数据。 二、案例 案例一: var q = (from c in db.Customers select c.Name ).
阅读全文
摘要:LINQ基础—Intersect子句 一、简介 Intersect返回交集,交集是指同时出现在两个集合中的元素,和数据库中的Intersect方法实现功能一样。 二、案例 var q = (from c in db.Customers select c.Age ).Intersect( from e
阅读全文
摘要:LINQ基础—UNION子句 一、简介 Union返回并集,并集是指位于两个集合中任一集合的唯一的元素(自动去重复了)。在LINQ中UNION默认是去重的,没有UNION ALL 语句,不去重用CONCAT()。 二、案例 1.查询语句写法 Union会去除重复项,相当于SQL的Union var
阅读全文
摘要:LINQ基础—Join子句 一、简介 使用join子句可以将来自不同源序列并且在对象模型中没有直接关系的元素相关联,唯一的要求是每个源中的元素需要共享某个可以进行比较以判断是否相等的值,join子句使用特殊的equals关键字比较指定的键是否相等。 二、案例 内部连接 var innerJoinQu
阅读全文
摘要:LINQ基础—GroupBy子句 一、简介 group子句返回一个IGrouping(T Key,T element)对象序列,编译时,group子句被转换成对GroupBy方法的调用。 二、案例 案例一: 根据首字母分组,并打印到控制台 //数据源 string[] fruits = { "app
阅读全文
摘要:LINQ基础—OrderBy子句 一、简介 适用场景:对查询出的语句进行排序,比如按时间排序等等。说明:按指定表达式对集合排序;默认是升序,加上descending表示降序,对应的扩展方法是OrderBy和OrderByDescending。1.对查询出来的结果集进行升序或降序排列。2.可以指定多个
阅读全文
摘要:LINQ基础——WHERE子句 一、简介 将一个布尔条件("谓词")应用于每个源元素(由范围变量引用),并返回满足指定条件的元素。适用场景:实现过滤,查询等功能。说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句。Where操作包括3种形式,分
阅读全文
摘要:LINQ基础——LET子句 一、简介 用于创建查询自身的范围变量,let语句是重命名。let位于第一个from和select语句之间。 二、案例 案例一: 将字符串数组中的两句英文语句中所有的元音字母打头的单词输出到控制台 string[] strings ={ "I am a new Studen
阅读全文
摘要:LINQ基础——FROM子句 一、简单FROM子句 获取数据源: var queryAllCustomers = from cust in Customers select cust; 分析: 查询表达式必须以from子句开头例子中cust是范围变量,范围变量类似于foreach循环中的迭代变量,但
阅读全文
摘要:Guid(全局统一标识符) 一、简介 1.什么是GUID?全局唯一标识符(GUID,Globally Unique Identifier),GUID也称作 UUID(Universally Unique IDentifier) 。GUID是一种由算法生成的二进制长度为128位的数字标识符。GUID主
阅读全文
摘要:??运算符 一、简介 ?? 运算符称为 null 合并运算符,用于定义可以为 null 值的类型和引用类型的默认值。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。 二、代码 class NullCoalesce { static int? GetNullableI
阅读全文
摘要:多线程的AutoResetEvent 一、简介 我们在线程编程的时候往往会涉及到线程的通信,通过信号的接受来进行线程是否阻塞的操作。AutoResetEvent 允许线程通过发信号互相通信。通常,此通信涉及线程需要独占访问的资源。具体方法和扩展方法请详见AutoResetEvent类,最常用方法中就
阅读全文
摘要:线程池(ThreadPool) 一、简介 前面介绍了平时用到的大多数的多线程的例子,但在实际开发中使用的线程往往是大量的和更为复杂的,这时,每次都创建线程、启动线程。从性能上来讲,这样做并不理想(因为每使用一个线程就要创建一个,需要占用系统开销);从操作上来讲,每次都要启动,比较麻烦。为此引入的线程
阅读全文
摘要:Mutex 一、简介 Mutex的突出特点是可以跨应用程序域边界对资源进行独占访问,即可以用于同步不同进程中的线程,这种功能当然这是以牺牲更多的系统资源为代价的。主要常用的两个方法:public virtual bool WaitOne() 阻止当前线程,直到当前 System.Threading.
阅读全文
摘要:Monitor类实现线程同步 一、简介 Lock关键字是Monitor的一种替换用法,lock在IL代码中会被翻译成Monitor. lock (obj) { //代码段 } //就等同于 Monitor.Enter(obj); //代码段 Monitor.Exit(obj); Monitor的常用
阅读全文
摘要:LOCK实现线程同步 一、简介 线程安全概念:线程安全是指在当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程有可能和其他线程共享一些资源,比如,内存,文件,数据库等。当多个线程同时读写同一份共享资源的时候,可能会
阅读全文
摘要:ThreadPriority 一、简介 如果在应用程序中有多个线程在运行,但一些线程比另一些线程重要,这种情况下可以在一个进程中为不同的线程指定不同的优先级。线程的优先级可以通过Thread类Priority属性设置,Priority属性是一个ThreadPriority型枚举,列举了5个优先等级:
阅读全文
摘要:Suspend()和Resume() 一、简介 其实在C# 2.0以后, Suspent()和Resume()方法已经过时了。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被”挂起”的线
阅读全文