原文链接:

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中去除空格的所有字符数。

 1 using System;
 2 namespace ExtensionMethodsExample
 3 {
 4    public static class Extension
 5     {
 6        public static int WordCount(this string str)
 7        {
 8            string[] userString = str.Split(new char[] { ' ', '.', '?' },
 9                                        StringSplitOptions.RemoveEmptyEntries);
10            int wordCount = userString.Length;
11            return wordCount;
12        }
13        public static int TotalCharWithoutSpace(this string str)
14        {
15            int totalCharWithoutSpace = 0;
16            string[] userString = str.Split(' ');
17            foreach (string stringValue in userString)
18            {
19                totalCharWithoutSpace += stringValue.Length;
20            }
21            return totalCharWithoutSpace;
22        }
23 }
24 }

View Code

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

 1 using System;
 2 namespace ExtensionMethodsExample
 3 {
 4     class Program
 5     {
 6         static void Main(string[] args)
 7         {
 8             string userSentance = string.Empty;
 9             int totalWords = 0;
10             int totalCharWithoutSpace = 0;
11             Console.WriteLine("Enter the your sentance");
12             userSentance = Console.ReadLine();
13             //calling Extension Method WordCount
14             totalWords = userSentance.WordCount();
15             Console.WriteLine("Total number of words is :"+ totalWords);
16             //calling Extension Method to count character
17             totalCharWithoutSpace = userSentance.TotalCharWithoutSpace();
18             Console.WriteLine("Total number of character is :"+totalCharWithoutSpace);
19             Console.ReadKey();
20         }
21     }
22 } 

View Code

转载于:https://www.cnblogs.com/wq352/p/6431357.html

[译文]c#扩展方法(Extension Method In C#)相关推荐

  1. C# Note21: 扩展方法(Extension Method)及其应用

    前言 今天在开会时提到的一个概念,入职3个多月多注重在项目中使用C#的编程知识,一直没有很认真地过一遍C#的全部语法,当我们新人被问及是否了解Extension Method时,一时之间竟不能很通俗准 ...

  2. Unity学习笔记--Extension Method 扩展方法

    引言 最近跟着麦克学习Unity的时候,学习到了类的扩展方法.比如你现在有一个已有的类,你想给它加一个方法,当然如果是你自己写的类可以直接在这个方法里面写,但是如果是Unity自带的类,我们不可能直接 ...

  3. 不可不知的C#基础 1. -- Extension 扩展方法

    背景 前几天有同事问到我一个简单的功能, 就是当你使用枚举时如何给每个一元素增加描述字符串并且可以很容易的读取出来. 比如有一个枚举类型是列出对一个问题给出的选项(例如: 同意?不同意?中立?): p ...

  4. 为JS和C#类加一个扩展方法吧:P

    JS扩展方法:通过原型prototype为JS的function扩展一个新的function <script> function Rectangle(width, height) { th ...

  5. 再不用担心DataRow类型转换和空值了(使用扩展方法解决高频问题)

    在使用DataRow读取数据时,通常会遇到数据可能为Null, 但是又需要转换为如int等其它类型的数据,因此就通常会写这样的代码: if (dr[name] != DBNull.Value & ...

  6. class ts 扩展方法_JUnit 5自定义扩展

    前言 在org.junit.jupiter.api.extension包下,JUnit5提供了丰富的扩展接口,通过实现这些接口,我们可以定制自己的扩展并注册到JUnit中来实现功能扩展. Extens ...

  7. EFCore3.1+编写自定义的EF.Functions扩展方法

    前言 本文主要是讲解EF Core3.0+ 如何实现自定义的数据库扩展函数,虽然EF.Functions 提供了很多数据库函数,但是并不全面.比如加密解密...这样的话 我们就需要自己扩展这些数据库函 ...

  8. Net C# 扩展方法

    Net C# 扩展方法 扩展方法使您能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法 ...

  9. Extension Method - c#3.0

    Extension Method - c#3.0 Extension Method能够让你为一个已经存在的类添加方法,而不用去创建一个子类继承它. 具体做法: 定义一个静态的类来包含这个扩展方法. 定 ...

最新文章

  1. (十六) 整合spring cloud云架构 -使用spring cloud Bus刷新配置
  2. 5G对数据中心的架构产生的影响-vecloud微云
  3. 计算机网络-后退N帧协议习题思考:数据帧长度范围128~512字节,求信道利用率达到最大,帧序列的比特数至少为多少
  4. 2022.2.21显示器连接器引脚信号定义1
  5. 解决LInux更新慢的问题, 更换国内软件源
  6. 2017的金秋,派卧底去阿里、京东、美团、滴滴带回来的面试题及答案
  7. Java日志框架(二)
  8. 计算机页面排版的笔记,爱记笔记却懒得排版?这款笔记 App 为你准备了最实用的经典模板:格子笔记...
  9. springboot项目启动后执行方法
  10. React.memo Component definition is missing display name
  11. Android Studio实现百度地图定位(显示经纬度和地址)
  12. 2019六月广东省计算机二级报名,广东2019年3月全国计算机二级考试报名时间通知...
  13. 中国超级计算机之最,中国超级计算机神威太湖之光世界最快,且总量排名榜单第一...
  14. 老男孩教育python全栈第九期视频
  15. 大白菜U盘重装win7系统教程,PE重装win7系统教程
  16. 流式数据架构理论 ◆ 基本概念
  17. uni-app手机调试equest:fail abort
  18. Linux安装expect
  19. 虚拟现实VS增强现实,谁更受欢迎?
  20. BugKu CTF 社工题部分writeup

热门文章

  1. 四川职业学校计算机专业那个好6,四川排名前六的单招学院那些专业比较好?
  2. 牛客第四次多校Maximum Mode
  3. python 正则的使用 —— 编写一个简易的计算器
  4. Ubuntu中设置静态IP和DNS
  5. Git - 使用指南
  6. IBatis.net动态SQL语句
  7. Android -----ArrayAdapter的重写 .
  8. 一条进程的栈区、堆区、数据区和代码区在内存中的映射
  9. Linux c 基于内存的进程通信—共享内存、共享队列(消息队列)
  10. Python下ImportError: DLL load failed: 找不到指定的模块