博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
扩展方法使用
阅读量:5905 次
发布时间:2019-06-19

本文共 2723 字,大约阅读时间需要 9 分钟。

,这里就说继续上篇说下使用方法。

扩展方法能够帮助我们向现有类型中加入方法.来符合我们的须要。比如我们能够用扩展方法向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类型的扩展。当然了其它的类型也是能够扩展的,创造符合自己的须要的方法。由扩展方法联想我们的静态方法。静态方式并不针对某一类型。可是扩展方法却是这对某一类型的扩展,没有继承。

这是他们的不同点。

你可能感兴趣的文章
我的友情链接
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
javascript继承方式详解
查看>>
lnmp环境搭建
查看>>
自定义session扫描器精确控制session销毁时间--学习笔记
查看>>
PHP队列的实现
查看>>
单点登录加验证码例子
查看>>
[T-SQL]从变量与数据类型说起
查看>>
occActiveX - ActiveX with OpenCASCADE
查看>>
BeanUtils\DBUtils
查看>>
python模块--os模块
查看>>
Java 数组在内存中的结构
查看>>
《关爱码农成长计划》第一期报告
查看>>
学习进度表 04
查看>>
谈谈javascript中的prototype与继承
查看>>
时序约束优先级_Vivado工程经验与各种时序约束技巧分享
查看>>
minio 并发数_MinIO 参数解析与限制
查看>>
flash back mysql_mysqlbinlog flashback 使用最佳实践
查看>>
mysql存储引擎模式_MySQL存储引擎
查看>>
java 重写system.out_重写System.out.println(String x)方法
查看>>