c#扩展方法-摘自msdn

扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。  对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。

扩展方法编写代码:

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static int WordCount(this String str)
        {
            return str.Split(new char[] { ‘ ‘, ‘.‘, ‘?‘ },
                             StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }
}

1.必需为静态方法

2.第一个参数为向哪个类型添加扩展方法(this 类型名称 行参名称)

调用时引入命名空间:

using ExtensionMethods;

调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异:

string s = "Hello Extension Methods";
int i = s.WordCount();

注意:在代码中,可以使用实例方法语法调用该扩展方法。  但是,编译器生成的中间语言 (IL) 会将代码转换为对静态方法的调用。  因此,并未真正违反封装原则。  实际上,扩展方法无法访问它们所扩展的类型中的私有变量。

可以使用扩展方法来扩展类或接口,但不能重写扩展方法。 与接口或类方法具有相同名称和签名的扩展方法永远不会被调用。  编译时,扩展方法的优先级总是比类型本身中定义的实例方法低。  换句话说,如果某个类型具有一个名为 Process(int i) 的方法,而你有一个具有相同签名的扩展方法,则编译器总是绑定到该实例方法。当编译器遇到方法调用时,它首先在该类型的实例方法中寻找匹配的方法。  如果未找到任何匹配方法,编译器将搜索为该类型定义的任何扩展方法,并且绑定到它找到的第一个扩展方法。

通常,建议你只在不得已的情况下才实现扩展方法,并谨慎地实现。

时间: 2024-08-27 08:32:31

c#扩展方法-摘自msdn的相关文章

C#3.0扩展方法学习篇

什么是类的扩展方法 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. MSDN Extension methods enable you to "add" methods to existing types without creating a new derived type, recompiling, or otherwise modifying the original type. Extension methods are a

【开源】OSharp框架解说系列(3):扩展方法

〇.前言 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异. 最常见的扩展方法是 LINQ 标准查询运算符,它将查询功能添加到现有的 System.Collections.IEnumerable 和 System.Collections.Generic.

C#基础之扩展方法

扩展方法使您能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异. --- 摘自MSDN 下面我们自己定义一个A类和Program类来为string扩展方法  public static class A     {         public static 

c# 扩展方法奇思妙用基础篇五:Dictionary<TKey, TValue> 扩展

Dictionary<TKey, TValue>类是常用的一个基础类,但用起来有时确不是很方便.本文逐一讨论,并使用扩展方法解决. 向字典中添加键和值 添加键和值使用 Add 方法,但很多时候,我们是不敢轻易添加的,因为 Dictionary<TKey, TValue>不允许重复,尝试添加重复的键时 Add 方法引发 ArgumentException. 大多时候,我们都会写成以下的样子: var dict = new Dictionary<int, string>()

Unity中使用扩展方法解决foreach导致的GC

对于List这种顺序表,我们解决的时候还是可以使用for代替foreach即可.但是对于非顺序表,比如Dictionary或者Set之类,我们可以扩展方法Foreach,ForeachKey和ForeachValue来代替原有的foreach. 关于扩展方法,可参考:https://msdn.microsoft.com/zh-cn/library/bb383977.aspx static class DictionaryEx { /// <summary> /// 提供一个方法遍历所有项 //

C# 3.0 特性之扩展方法

今天,我们来聊一聊C#的扩展方法. C# 3.0中为我们提供了一个新的特性—扩展方法.什么是扩展方法呢?我们看一下MSDN的注解: 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型 也就是说,我们可以为基础数据类型,如:String,Int,DataRow,DataTable等添加扩展方法,也可以为自定义类添加扩展方法. 那么,我们怎么向现有类型进行扩展呢?我们再看看MSDN的定义: 扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的.

什么是扩展方法

msdn是这样规定扩展方法的:"扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的. 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀." 在类库中新建一个名为EString.cs类 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace W.Common { public static class EStrin

ASP.Net MVC开发基础学习笔记(2):HtmlHelper与扩展方法

一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归.所以抛弃之前的那种事件响应的模型,抛弃服务器端控件也理所当然. 但是,如果手写Html标签效率又比较低,可重用度比较低.这时,我们该怎样来提高效率呢?首先,经过上篇我们知道可以通过ViewData传递数据,于是我们可以写出以下的Html代码: 1 <input name="UserName&q

C#激爽特性——扩展方法

在最近的学习中,发现了一种用起来特别爽的C#特性——扩展方法,之前拜读<大话设计模式>一书的时候,书中提到这样一句话:“反射,反射,程序员的快乐”,本人菜鸟一只,到现在还未曾使用过反射,对于其是否真的快乐自然无从体会,不过扩展方法用起来称得上是相当快乐! 扩展方法使你能够向现有类型”添加“方法,而无需创建新的派生类型.重新编译或以其他方法修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实力方法一样进行调用.对于C#和Visual Basic 编写的客户端代码,调用扩展方法与调用