,这里就说继续上篇说下使用方法。
扩展方法能够帮助我们向现有类型中加入方法.来符合我们的须要。比如我们能够用扩展方法向string类中加入一个IsValidEmailAddress方法,用于检測是否符合Email标准.
1定义扩展方法
扩展方法规定类必须是静态的.里面包括的全部方法必须都是静态的,(注意:不能定义扩展属性和事件)。且第一个參数指定方法作用的类型,用this修做前缀.
比如
public static classMyExtensions { public static int WordCount(this Stringstr) { return str.Split(new char[] { ' ','.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length; } }
该方法的參数用this,表示自身改动的为this类型,
2使用
扩展方法被定义为静态方法,可是通过实例才干调用,并且參数以this改动为前缀.并且是在编译时绑定的.在使用前首先引入命名空间,然后实例化对象就能够调用了。
3使用实例
String类的方法不少,可是有些用的不是非常习惯.这里写了一个字符为空的异常提示类.多用于传递查收的校验
首选定义静态类.在定义静态方法
using System;usingSystem.Collections.Generic;using System.Linq;using System.Web;usingSystem.Diagnostics;usingSystem.Reflection;using System.IO; namespace ConfigurationSectionTest1{ public static class ThrowError{DebuggerNonUserCode.假设设计器提供的类型和成员不是由用户专门创建的代码的一部分。则会添加调试过程的复杂性。 此特性禁止在调试器窗体中显示这些附属类型和成员,并自己主动逐句通过而不会进入并单步运行设计器提供的代码。 当逐句通过用户代码时,假设调试器遇到此特性。用户将不会看到设计器提供的代码。而且会运行用户提供的下一条代码语句。 ////// 检查对象是否为空。假设为空。抛出异常/// ////////////[DebuggerNonUserCode]publicstatic void NullCheck (this object data, string message, paramsobject[] messageParams) where T : System.Exception { (data== null).TrueThrow (message, messageParams); } /// /// 检查对象是否为空。假设为空,抛出ArgumentNullException/// /// 被检查的对象///參数的名称[DebuggerNonUserCode]publicstatic void NullCheck(this object data, string message) { NullCheck (data,message); } /// /// 假设条件表达式boolExpression的结果值为真(true)。则抛出strMessage指定的错误信息/// ///条件表达式/// 错误信息/// 错误信息的參数/// 异常的类型 ////// 假设条件表达式boolExpression的结果值为真(true),则抛出message指定的错误信息[DebuggerNonUserCode]publicstatic void TrueThrow (this bool parseExpressionResult, string message,params object[] messageParams) where T : System.Exception { if(parseExpressionResult) { if(message == null) throw new ArgumentNullException("message"); Type exceptionType = typeof(T); Objectobj = Activator.CreateInstance(exceptionType); Type[]types = new Type[1]; types[0]= typeof(string); ConstructorInfo constructorInfoObj = exceptionType.GetConstructor( BindingFlags.Instance| BindingFlags.Public, null, CallingConventions.HasThis,types, null); Object[]args = new Object[1]; args[0]= string.Format(message, messageParams); constructorInfoObj.Invoke(obj,args); throw(Exception)obj; } } }}
对于调使用方法方,经常使用在方法的參数检測上
Pubilc void test(string Id){ Id.NullCheck("字符Id不能为空");}图例
实例化的Id能够直接调用该方法,进行推断,为空,则抛出我们写好的提示。如图
小结:
以上是对string类型的扩展。当然了其它的类型也是能够扩展的,创造符合自己的须要的方法。由扩展方法联想我们的静态方法。静态方式并不针对某一类型。可是扩展方法却是这对某一类型的扩展,没有继承。
这是他们的不同点。