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

简介:

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

十八. Lambda

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

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

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

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

1
2
3
4
5
6
7
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.扩展方法定义语法如下:

1
2
3
4
5
6
7
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标识的参数不能为可选参数;

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

1
2
3
4
5
6
7
8
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,使用代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private  static  object  syncObj =  new  object (); //类的静态字段
             try
             {
                 Monitor.Enter(syncObj);
                 //其它代码
             }
             finally
             {
                 Monitor.Exit(syncObj);
             }
 
 
lock (syncObj)  //为上面代码的简写形式
{
   //执行代码
};

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

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

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

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

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

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

本文转自 梦在旅途 博客园博客,原文链接:http://www.cnblogs.com/zuowj/p/4470829.html  ,如需转载请自行联系原作者

相关文章
|
4月前
|
人工智能 开发框架 调度
C#/.NET这些实用的技巧和知识点你都知道吗?
C#/.NET这些实用的技巧和知识点你都知道吗?
|
6月前
|
开发框架 .NET Linux
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
|
6月前
|
算法 安全 C#
C# | 上位机开发新手指南(六)摘要算法
你知道摘要算法么?它在保障数据安全方面非常有用! 它能够将任意长度的数据转换成固定长度的消息摘要,从而确保数据的完整性和可靠性。比如说,我们下载软件的时候,就可以用摘要算法来检验软件是否被篡改,保障我们的电脑安全。 那这个算法的工作原理是怎样的呢?大致就是通过一系列复杂的计算,将原始数据转换为一个固定长度的摘要信息。而且无论输入的数据大小,输出的摘要信息长度都是一样的。 那么摘要算法有什么用处呢?比如数字签名,确保数据的来源和内容没有被篡改。还有密码学等领域的应用,可以说是非常厉害了!
73 0
C# | 上位机开发新手指南(六)摘要算法
|
设计模式 C#
C#—代码理解知识点(二)
上回介绍了关于第一章所设计的那些知识点,这次介绍一下第二章所涉及到的代码,以及由代码折射出的知识点!
C#—代码理解知识点(一)
有上面的代码之后就不得不上传上上面这个图片了,这是我们刚开始学习C#接触的第一个程序,虽然只是一个简单的输出“Hello World"程序,却带给我了我们这么多的知识以及如此规范的模版!
|
Java C#
【c#入门杂选】-带你熟知c#基础知识点《思维导图》
【c#入门杂选】-带你熟知c#基础知识点《思维导图》
176 0
|
存储 开发框架 Java
|
存储 网络协议 算法