阅读《LEARNING HARD C#学习笔记》知识点总结与摘要四

又是一个周末,刚好有时间,又继续复习与总结了,希望能让大家受益,不足之处欢迎指正,谢谢!

十八. Lambda

1.Lambda表达式:匿名方法的另一种表现形式,它可以包含表达式和语句,且用于创建委托或转换为表达式树,定义语法:(形参列表)=>{方法体}; 单个参数时,可以省略括号

2.Lambda表达式树是用来表示Lambda表达式逻辑的一种数据结构,它将代码表示成一个对象树,而非可执行的代码,定义语法如(a+b):

Experssion<Func<int,int,int>> (a,b)=>a+b;

通过代码动态构造Lambda表达式树,如下:

parameterExpression a=Expression.Parameter(typeof(int),”a”);

parameterExpression a=Expression.Parameter(typeof(int),”b”);

BinaryExpression body=Expression.Add(a,b);

Experssion<Func<int,int,int>> exprTree=Expression.Lambad(body,a,b);

3.Lambda表达式树通过调用Compile方法将表达式树转换为可执行代码(即所表示的委托)

十九.扩展方法

1.扩展方法是一种方法,它用来扩展已知类型的方法成员(即在不改变原有类型的前提下,附加新的方法);

2.扩展方法定义规则:

  a)必须在一个非嵌套、非泛型的静态类(即标准的静态类)中定义;

  b)它至少要有一个参数;

  c)第一个参数必须在类型加上this关键字,表示向该参数对应的类型就进扩展;

  d)第一个参数不能使用任何修饰符(如:不能使用rel,out)

  e)第一个参数的类型不能是指针类型;

3.扩展方法定义语法如下:

static class 静态类名
{
         public static 返回类型 扩展方法名(this 目标扩展类型 形参名,其它形参…)
         {
                   //方法体
        }
}    

4.空引用(NULL)支持调用扩展方法

注意:定义扩展方法时,为防止方法污污染(即扩展的方法在某些类型中并无实际作用或不需要),应尽量扩展具体类型,而不要扩展其基类

 

二十.LINQ

1.LINQ,即语言集成查询,提供一种跨越各种数据源的统一的查询方式

2.LINQ查询表达式必须以from子句开头,并且必须以select或group子句结尾,在第一个from子句与最后一个select或group子句之间可以包含多个子包,定义语法如下:

  Var query=from n in numbers where n<=10 select n;

3.LINQ查询表达式是建立在Lambda表达式和扩展方法的基础上的,而Lambda表达式又是建立在委托的基础上的,扩展方法也属于方法,所以LINQ的本质还是对方法的调用,对于编译器而言,使用LINQ查询表达式与使用方法调用的代码完全相同。

二十一.C#4.0新特性

可选参数:指定了默认值的参数,即在调用方法时,该参数可以指定实参,也可以不指定实参,若不指定则采用默认值;

注意:1.可选参数必须在非可选参数的后面;2.默认值必须为常量;3.不定参数(即用params表示的参数数组)不能为可选参数;4.用rel或out标识的参数不能为可选参数;

命名实参:即在调用方法时,直接指定形参名并为其赋值(指定实参),可不按方法形参的顺序,且非可选参数必需全部指定实参,使用语法如下:

static void Write(DateTime dt,string name,string result="www.zuowenjun.cn")
        {
            Console.Write("{0}-{1}-{2}", dt, name, result);
        }

//调用方法
Write(name: "梦在旅途", dt: DateTime.Now);

 

动态类型:即用dynamic关键字来表示某个变量的类型,动态类型可不用编写显式强制转换的代码,强制转换由编译器来完成;定义语法如下:

dynamic d=10;dynamic str=”www.zuowenjun.cn”; dynamic p=new People();

注意:1.不能直接用动态类型作为实参来调用扩展方法;2.委托与动态类型间不能做隐式转换;3.不能调用构造函数或静态方法;4.不能将动态类型dynamic作为基类声明,也不能作为泛型类型参数的约束

二十二.多线程

1.线程与进程关系:线程是进程的执行单元,操作系统通过调度线程来使应用程序工作,而进程则是线程的容器,它是由操作系统创建,又在具体的执行过程中创建了线程;一个进程至少包含一个线程。

2.线程分前台线程与后台线程之分,在同一个线程中,若所有前台线程结束后,CLR会强制强结束仍在运行的所有后台线程,这些后台线程被直接终止,却不会抛出任何异常。主线程一定是前台线程。线程的创建语法如下:

    Thread 线程变量名=new Thread(委托实例);

    线程变量名.IsBackgroud=true; //为true则表示为后台线程,否则为前台前线程

    线程变量名.Start();//启动线程

3.线程池:是指存放应用程序中要使用的线程的集合,若要使用线程池中的线程,需要调用静态方法:ThreadPool.QueueUserWorkItem

4.线程同步:确保某一时间只有一个线程在操作共享资源,实现线程同步的方法:

a)监视器Monitor、lock,使用代码如下:

private static object syncObj = new object();//类的静态字段
            try
            {
                Monitor.Enter(syncObj);
                //其它代码
            }
            finally
            {
                Monitor.Exit(syncObj);
            }

lock(syncObj) //为上面代码的简写形式
{
  //执行代码
};

b)Mutex对象,Mutex是跨进程的,因此我们可以在同一台机器甚至远程的机器上的多个进程上使用同一个互斥体,使用代码如下:

Mutex mt=new Mutex();
mt.WaitOne();//等待
//执行代码
mt.ReleaseMutex();//释放

c) ReaderWriterLock类型,用ReaderWriterLock进行资源访问时,如果在某一时刻资源并没有获取写的独占权,那么可以获得多个读的访问权,单个写入的独占权,如果某一时刻已经获取了写入的独占权,那么其它读取的访问权必须进行等待,使用语法如下:

static ReaderWriterLock rwLock = new ReaderWriterLock();//类的静态字段
rwLock.AcquireWriterLock(1000);
//执行代码
rwLock.ReleaseWriterLock();

d)还有SynchronizationAttribute、MethodImplAttribute、同步事件和等待句柄等,具体每种用法可参见该篇博文:

http://www.cnblogs.com/michaelxu/archive/2008/09/20/1293716.html

时间: 2025-01-07 04:36:07

阅读《LEARNING HARD C#学习笔记》知识点总结与摘要四的相关文章

阅读《LEARNING HARD C#学习笔记》知识点总结与摘要二

今天继续分享我的阅读<LEARNING HARD C#学习笔记>知识点总结与摘要二,仍然是基础知识,但可温故而知新. 七.面向对象 三大基本特性: 封装:把客观事物封装成类,并隐藏类的内部实现细节,仅开放相关的访问属性.方法等 继承:通过继承可以复用父类的代码: 多态:1.允许将子对象赋值给父对象,2.同方法在不同的对象上有不同的实现方式: 子类初始化顺序:初始化类的实例字段à调用父类构造函数à调用子类构造函数: 重写:父类声明为virtual或abstract的类成员(属性.方法),在子类继

阅读《LEARNING HARD C#学习笔记》知识点总结与摘要三

最近工作较忙,手上有几个项目等着我独立开发设计,所以平时工作日的时候没有太多时间,下班累了就不想动,也就周末有点时间,今天我花了一个下午的时间来继续总结与整理书中要点,在整理的过程中,发现了书中的一些不足,我在以下的博文中都有说明,大家如果有这本书的可以对照着知识点及书本相结合的方式来看,没有这本本书的也可以对照着我整理的知识要点进行实际编码测试与学习,希望能对大家有所帮助,如果觉得可以的话,还请推荐哦,谢谢! 阅读<LEARNING HARD C#学习笔记>知识点总结与摘要系列文章从这篇博文

阅读《LEARNING HARD C#学习笔记》知识点总结与摘要一

本人有幸在Learning Hard举行的整点抢书活动<Learninghard C#学习笔记>回馈网友,免费送书5本中免费获得了一本<LEARNING HARD C#学习笔记>,我(梦在旅途)虽然从事.NET开发多年,但一直都没有能好好的系统学习,特别是C#5.0的知识,现如今有幸得到这本书,可以好好的温习.巩固和提升, 非常感谢Learning Hard! 我在收到该书后,花了约两周的时间就看完了,主要是集中在晚上及周末时间,因为本书是从浅入深讲解C#知识,我虽谈不上什么高手,

js学习笔记知识点

AJAX用法安全限制JSONPCORS面向对象编程创建对象构造函数原型继承class继承 AJAX 用法 AJAX不是JavaScript的规范,它只是一个哥们"发明"的缩写:Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求 在现代浏览器上写AJAX主要依靠XMLHttpRequest对象: 'use strict'; function success(text) { var textarea = document.getE

《软件调试的艺术》学习笔记——GDB使用技巧摘要

<软件调试的艺术>学习笔记——GDB使用技巧摘要 <软件调试的艺术>,因为名是The Art of Debugging with GDB, DDD, and Eclipse. 作者是美国的Norman Matloff和Peter Jay Salzman,中文版由张云翻译.是人邮出版社图灵程序设计丛书初版.这里称为"艺术",个人觉得有点过了,但是其中关于gdb以及在gdb基础之上集成的DDD和Eclipse调试技巧的整理确实是做的很好,对于Linux/开源社区下的

Deep Learning(深度学习)学习笔记整理系列之(四)

Deep Learning(深度学习)学习笔记整理系列 [email protected] http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04-08 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主

Deep Learning(深度学习)学习笔记整理系列之(四)——CNN

[email protected] http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0  2013-04-08 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除. 3)本人才疏学浅,整理总结的时候难免出错,还望各位前辈

springMVC学习笔记--知识点总结1

以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- 配置渲染器 --> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property

支持向量机-Machine Learning In Action学习笔记

P.S. SVM比较复杂,代码没有研究清楚,进一步学习其他知识后再来补充.以下仅罗列了最核心的知识,来自<机器学习实战>的学习摘要. 优点:泛化错误率低,计算开销不大,结果易解释. 缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二类问题. 适用数据类型:数值型和标称型数据. 线性可分数据:画出一条直线将两组数据点分开. 超平面(将数据集分隔开来的直线,为N-1维):分类的决策边界.如果数据点离决策边界越远,那么其最后的预测结果也就越可信. 间隔:点到分隔面的距离.(离分隔超