原文链接:

https://www.codeproject.com/Tips/709310/Extension-Method-In-Csharp

介绍

扩展方法是C# 3.0引入的新特性。扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。

扩展方法的特性

以下包含了扩展方法的基本特性

  1. 扩展方法是静态方法。
  2. 扩展方法的类是静态类。
  3. .NET中,此方法的参数中必须要有被扩展类作为第一个参数,此参数前面用this关键字修饰。此方法在客户端作为一个指定类型的实例调用。
  4. 扩展方法在VS智能提示中显示。当在类型实例后键入“.”会提示扩展方法。
  5. 扩展方法必须在同一命名空间使用,你需要使用using声明导入该类的命名空间。
  6. 针对包含扩展方法的扩展类,你可以定义任何名称。类必须是静态的。
  7. 如果你想针对一个类型添加新的方法,你不需要有该类型的源码,就可以使用和执行该类型的扩展方法。
  8. 如果扩展方法与该类型中定义的方法具有相同的签名,则扩展方法永远不会被调用。

示例代码

我们针对string类型创建一个扩展方法。该扩展方法必须指定String作为一个参数,在string的实例后键入“.”直接调用该扩展方法。

在上面的 WordCount()方法里,我们传递了一个string类型参数,通过string类型的变量调用,换言之通过string实例调用。

现在我们创建了一个静态类和两个静态方法。一个用来计算string中词的个数。另一个方法计算string中去除空格的所有字符数。

 using System;
namespace ExtensionMethodsExample
{
public static class Extension
{
public static int WordCount(this string str)
{
string[] userString = str.Split(new char[] { ' ', '.', '?' },
StringSplitOptions.RemoveEmptyEntries);
int wordCount = userString.Length;
return wordCount;
}
public static int TotalCharWithoutSpace(this string str)
{
int totalCharWithoutSpace = ;
string[] userString = str.Split(' ');
foreach (string stringValue in userString)
{
totalCharWithoutSpace += stringValue.Length;
}
return totalCharWithoutSpace;
}
}
}

现在我们创建一个可执行的程序,输入一个string,使用扩展方法来计算所有词数以及string中的所有字符数,结果显示到控制台。

 using System;
namespace ExtensionMethodsExample
{
class Program
{
static void Main(string[] args)
{
string userSentance = string.Empty;
int totalWords = ;
int totalCharWithoutSpace = ;
Console.WriteLine("Enter the your sentance");
userSentance = Console.ReadLine();
//calling Extension Method WordCount
totalWords = userSentance.WordCount();
Console.WriteLine("Total number of words is :"+ totalWords);
//calling Extension Method to count character
totalCharWithoutSpace = userSentance.TotalCharWithoutSpace();
Console.WriteLine("Total number of character is :"+totalCharWithoutSpace);
Console.ReadKey();
}
}
}

最新文章

  1. Centos7 关闭防火墙
  2. Visual Studio for Mac 简介
  3. 生成highcharts报表时对数据没有用= eval('([' + seriesArray+ '])')处理生成数组,而是简单的拼成字符串,结果导致大量的场景出现
  4. java.util.ConcurrentModificationException 解决办法
  5. ubuntu APT-GET工作原理
  6. oracle PL/SQL(procedure language/SQL)程序设计(续集)之PL/SQL函数
  7. Ajax概述
  8. Unity3D Object.DontDestroyOnLoad 备忘
  9. cassandra 3.x官方文档(5)---探测器
  10. Windows 安装JDK
  11. C#ATM
  12. 如何增加黑客通过ssh入侵的难度--保护ssh的三把锁
  13. Android学习之基础知识十—内容提供器(Content Provider)
  14. [daily][ulimit][coredump] 快速简单粗暴的用coredump调试
  15. vim快速指南
  16. 【cocos2d-x 手游研发小技巧(7)图片资源加密,Lua文件加密】
  17. Java基础教程(21)--泛型
  18. 七牛云整合Ueditor的ThinkPHP版本
  19. 'cl.exe' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  20. Maven 阿里源

热门文章

  1. python基础整理6——爬虫基础知识点
  2. HDU 3577Fast Arrangement(线段树模板之区间增减更新 区间求和查询)
  3. Linux内存调试工具初探-MEMWATCH(转)
  4. 关于CodePlex
  5. 五种典型开发周期模型(瀑布、V、原型化、螺旋、迭代)
  6. 查询job的几个语句
  7. Cannot obtain block length for LocatedBlock故障分析和解决
  8. Scala中=>的用法
  9. 03、 forms组件
  10. 3、modleForm组件