



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C#4.0 Linq to Object学习笔记(一)扩展方法(Extension Methods)扩展方法允许我们对任何类型在没有继承和改变源代码的情况下,去添加额外的方法。这些被添加的扩展方法,在实用时与原有的方法一样,用.net符号调用。扩展方法被作为静态方法在一个静态类中构建。方法的第一个参数的类型前包含了this 修改器,它告诉编译器,后面的类型将要被扩展。除了第二个参数变成了第一个参数,第三个参数编程第二个参数外(因为第一个带有this修改器的参数被跳过),其他的任何参数都会被正常处理。定义扩展方法的规则如下: 1.扩展方法必须被定义在一个非泛型的静类中。 2.静态类必须位于一个名字空间的根级别(不是被嵌入在另一个类中) 3.扩展方法必须是一个静态方法(因为这个类也必须是静态类,这是编译器强制的) 4.扩展方法的第一个参数必须以this修改器作为前缀; this 就是被扩展的类。下面我们通过一个实例来演示下扩展类的机制,我们通过一个扩展类为System.String 添加一个方法GetSHA1Hash. 编译工程后,任何使用了using MyNamespace 的代码文件,都能用一个String实例简单的调用这个方法,就像如下的例子: string password = ClearTextPassword; string hashedPassword = password.GetSHA1Hash(); 现在我们新建一个C# 的控制台工程,并添加一个MyNamespace的class文件。源代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Security.Cryptography;namespace MyNamespace public static class MyStringExtensions / extension method added to the String type, / single string argument: url. public static string CreateHyperlink( this string text, string url) return String.Format( 1, url, text); / extension method added to the String type, / with no additional arguments public static string GetSHA1Hash( this string text) if (string.IsNullOrEmpty(text) return null; SHA1Managed sha1 = new SHA1Managed(); byte bytes = sha1.ComputeHash( new UnicodeEncoding().GetBytes(text); return Convert.ToBase64String(bytes); Programs.cs 代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using MyNamespace;namespace Extension_Methods_01 class Program /Methods introduced to a given type using extension methods can be /called on an instance of that type in the same way ordinary instance /methods are called static void Main(string args) / SHA1 Hashing a string. / GetSHA1Hash is introduced via extension method string password = ClearTextPassword; string hashedPassword = password.GetSHA1Hash(); / write the results to the Console window Console.WriteLine(- SHA1 Hashing a string -); Console.WriteLine(Original: + password); Console.WriteLine(Hashed: + hashedPassword); 保存你的文件,并编译运行它,结果如下:被定义在一个命名空间中的扩展方法被一个引用了该命名空间的文件调用是有效的,这一点就像你使用LINQ to Objects时,在你的文件中引用了System.Linq语句,任何LINQ to Objects的扩展方法,在你的文件中都是有效的,你都能方便的调用。查询语法样式选项扩展方法样式(The extension method format)非常简单实用 ,可以将多个扩展方法级联在一起,每一返回的结果集(IEnumerable)都允许下一个扩展方法继续去操作前一个结果集。int nums = new int 0,4,2,6,3,8,3,1; var result1 = nums.Where(n = n n);/ or with line-breaks added for clarityvar result2 = nums .Where(n = n n);查询表达式样式(Query Expression format)这种样式非常受欢迎,特别是做Join和Group操作。虽然不是所有的标准查询都被查询表达式支持,该样式的优点是代码清晰,不考虑lambda表达式外,整个样式非常接近SQL的样式,容易理解和接受。int nums = new int 0,4,2,6,3,8,3,1; var result = from n in nums where n 5 orderby n select n;查询点样式(Query Dot syntax )两种样式的结合 用括号把一个查询表达式括起来,只要查询表达式返回一个IEnumerable, 就能够使用扩展方法继续操作。int nums = new int 0,4,2,6,3,8,3,1; var result = (from n in nums where n new element = element, average = source.Average() ) .Select(temp0 = Math.Pow(double)temp0.element - temp0.average), 2);Into 查询延续 group, join, and select 查询表达关键字允许查询结果集被抓取进入到一个本地变量,然后在其他的查询中使用。into
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能穿戴健康监测App创新创业项目商业计划书
- 教师招聘之《幼儿教师招聘》强化训练高能附答案详解(完整版)
- 教师招聘之《小学教师招聘》通关考试题库附完整答案详解【名师系列】
- 教师招聘之《小学教师招聘》通关考试题库附答案详解【培优b卷】
- 报社面试题目及答案
- 2025年教师招聘之《幼儿教师招聘》题库试题含答案详解(满分必刷)
- 深圳交警考试题库及答案
- 合成孔径雷达(SAR)伪装目标特性剖析与伪装效果量化评估体系构建
- 2025内蒙古呼伦贝尔林业集团有限公司招聘工作人员5人备考有答案详解
- 2025年教师招聘之《幼儿教师招聘》考前冲刺测试卷包附答案详解(突破训练)
- 《城市轨道交通车辆段(停车场)物业服务标准》
- 初级招标采购从业人员《招标采购法律法规》近年考试真题试题库(含答案)
- 教学评一体化理念
- 人音版七年级音乐上册教案全册
- ECE-R90-欧盟第3版-中文版(R090r3e-01)
- 2023学年武汉市武昌区九年级语文上学期期中检测试卷附答案
- 渠道衬砌施工方案(渠道预制混凝土块)
- 不交社保劳动合同模板
- 2024年云南省中考数学试题(含答案)
- GB 14102.1-2024防火卷帘第1部分:通用技术条件
- 越野跑策划方案
评论
0/150
提交评论