.net 扩展方法,lamada表达式 委托】的更多相关文章

扩展方法 (1)扩展方法是一种特殊的静态方法,它定义在一个静态类中,但可以在其他类的对象上向调用实例方法那样进行调用.因此,通过扩展方法,我们就可以在不修改一个类型的前提下对一个类型进行功能上的扩充,这种方法并不会产生新的类型,而是采用向已有类中加入新方法的方式来完成功能的扩展. (2)在对已有类进行扩展时,我们需要将所有的扩展方法都写在一个静态类中,这个静态类就相当于存放扩展方法的容器,所有的扩展方法都可以写在这里面.扩展方法与普通方法的声明方式不同,扩展方法的第一个参数以this关键字开始,…
string[] names = { "aa","bb","cc","dd"}; /* IEnumerable<string> query = from s in names where s.Length == 2 orderby s select s.ToUpper(); */ IEnumerable<) .OrderBy(s => s) .Select(s => s.ToUpper()); f…
连载目录    [已更新最新开发文章,点击查看详细] 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 对于用 C#.F# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法没有明显区别. 实现和调用自定义扩展方法 介绍如何为任意 .NET 类型实现自定义扩展方法. 客户端代码可以通过以下方法使用扩展方法,添加包含这些扩展方法的 DLL…
可以实现一个IComparable接口的CompareTo方法,或者是给予List的Sort扩展方法,传入委托实现,举个例子: list.Sort((a, b) => { var o = a.sortIndex - b.sortIndex; return o; }) 其实我们还可以根据OrderBy扩展方法来实现: autoList .OrderBy(a => a.StartsWith( : ) .ThenBy(a => a); 对于orderby可以参考:https://stackov…
1.自动属性 Auto-Implemented Properties 2.隐式类型 var  var变量不能作为全局变量使用,因为不能在编译时确定类型 3.参数默认值 和 命名参数 4.对象初始化器 与 集合初始化器 { } Person p = new Person(){ Name="aa",Age=18};//属性初始化器 List<Person> list = new List<Person>(){new Person(){ Name="aa&q…
1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法和属性等.Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为.例如,在一个方法前标注[Obsolete]特性,则调用该方法时VS则会提示该方法已过期的警告,如下图: 又如,在.Net Re…
举例演化Lambda string[] names ={"Burke", "Connor", "Frank", "Everett", "Albert", "George", "Harris", "David"}; //问题:从数组names中筛选字符长度为5的成员 //先声明一个返回类型为bool的静态函数 public static bool I…
一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名类(初始值不能为null). var s="c#"; }; 2.隐式类型的数组 };//int[] a=new int[]{1,10,100} ,,},,,}}//交错数组也可用new[]初始化,不支持隐式类型的多位数组. 3.var 只能作为局部变量使用,即可只能定义在方法内或在属性ge…
2.Lamada表达式     C#共有两种匿名函数:匿名方法和Lamada表达式.在2.0之前的C#版本中,创建委托的唯一方法是使用命名方法.C#2.0中引入了匿名方法,匿名方法就是没有名称的方法.从C#3.0开始,就可以使用一种新语法把实现代码赋予委托——Lamada表达式. 在了解Lamada表达式之前,我们先来了解一下匿名方法.用匿名方法定义委托的语法与之前的没有区别,但在实例化时就有了一些区别. 使用命名方法创建的委托 class Program { private delegate…
1.委托 C#的委托相当于C/C++中的函数指针.函数指针用指针获取一个函数的入口地址,实现对函数的操作. 委托与C/C++中的函数指针不同在于,委托是面向对象的,是引用类型,对委托的使用要先定义后实例化,最后才能调用.并且委托是类型安全的,它定义了返回类型和参数的类型,而在C/C++中,函数指针只是一个指向内存位置的指针,它不是类型安全的,我们无法判断这个指针实际指向什么,所以参数和返回类型等项就无法知道了. 定义委托 使用关键字delegate.语法类似于方法的定义,但没有方法体,定义的前面…