欢迎来到天天文库
浏览记录
ID:40543342
大小:54.38 KB
页数:4页
时间:2019-08-04
《C#4_Linq_to_Object_学习笔记_1》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C#4.0LinqtoObject学习笔记(一)扩展方法(ExtensionMethods)扩展方法允许我们对任何类型在没有继承和改变源代码的情况下,去添加额外的方法。这些被添加的扩展方法,在实用时与原有的方法一样,用.net符号调用。扩展方法被作为静态方法在一个静态类中构建。方法的第一个参数的类型前包含了this修改器,它告诉编译器,后面的类型将要被扩展。除了第二个参数变成了第一个参数,第三个参数编程第二个参数外(因为第一个带有this修改器的参数被跳过),其他的任何参数都会被正常处理。定义扩展方法的规则如下:1.扩展方法必须被定义在一个非泛型的静类中。2.静态类必须位于一个名字空间的根
2、级别(不是被嵌入在另一个类中)3.扩展方法必须是一个静态方法(因为这个类也必须是静态类,这是编译器强制的)4.扩展方法的第一个参数必须以this修改器作为前缀;this就是被扩展的类。下面我们通过一个实例来演示下扩展类的机制,我们通过一个扩展类为System.String添加一个方法GetSHA1Hash.编译工程后,任何使用了usingMyNamespace的代码文件,都能用一个String实例简单的调用这个方法,就像如下的例子:stringpassword="ClearTextPassword";stringhashedPassword=password.GetSHA1Hash();现
3、在我们新建一个C#的控制台工程,并添加一个MyNamespace的class文件。源代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Security.Cryptography;namespaceMyNamespace{publicstaticclassMyStringExtensions{//extensionmethodaddedtotheStringtype,//singlestringargument:url.publicstaticstrin
4、gCreateHyperlink(thisstringtext,stringurl){returnString.Format("{1}",url,text);}//extensionmethodaddedtotheStringtype,//withnoadditionalargumentspublicstaticstringGetSHA1Hash(thisstringtext){if(string.IsNullOrEmpty(text))returnnull;SHA1Managedsha1=newSHA1Managed();byte[]bytes=sha1
5、.ComputeHash(newUnicodeEncoding().GetBytes(text));returnConvert.ToBase64String(bytes);}}}Programs.cs代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingMyNamespace;namespaceExtension_Methods_01{classProgram{//Methodsintroducedtoagiventypeusingextensionmethodscan
6、be//calledonaninstanceofthattypeinthesamewayordinaryinstance//methodsarecalledstaticvoidMain(string[]args){//SHA1Hashingastring.//GetSHA1Hashisintroducedviaextensionmethodstringpassword="ClearTextPassword";stringhashedPassword=password.GetSHA1Hash();//writetheresultstotheConsolewindowConsole.Write
7、Line("-SHA1Hashingastring-");Console.WriteLine("Original:"+password);Console.WriteLine("Hashed:"+hashedPassword);}}}保存你的文件,并编译运行它,结果如下:被定义在一个命名空间中的扩展方法被一个引用了该命名空间的文件调用是有效的,这一点就像你使用LINQtoObjects时,在你的文件中引用了System.L
此文档下载收益归作者所有