C#基础之扩展方法

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

下面我们自己定义一个A类和Program类来为string扩展方法

 public static class A
    {
        public static int Test(this string s)
        {

            return 1;
        }

        public static int IndexOf(this string s, char c)
        {
            return 1;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            int a = A.Test("sds");
            int c = "sds".Test();
            Console.WriteLine(a);
            Console.WriteLine(c);

            int b = A.IndexOf("asdfg", ‘d‘);
            Console.WriteLine(b);
            int d = "asdfg".IndexOf(‘d‘);
            Console.WriteLine(d);
        }
    }

扩展方法很简单,就是在参数类型前面加this,就为当前参数的类型增加了扩展方法,但是必须在静态类中声明静态方法(想要扩展的方法).以上例子为string类扩展了Test方法和indexof方法(string中有同名方法),运行结果为1 1 1 2,由此可以推论 扩展的方法如果和string类中的方法重名,则会执行string类中的方法,而不会执行扩展方法,再让我们来看看反编译的结果

由此更可以确定 执行的是string中的方法,再看上面的两个调用,可以观察到调用的都是A类中的静态方法,和string类并无多大关联,也可以得出扩展方法是不能调用string中的私有变量和方法,所以 string类也不用重新编译.

对扩展类总结下:

扩展方法不改变原有被扩展类代码,不用重新编译被扩展类.

不能访问被扩展类的私有成员,当和同名方法重名时优先执行原方法

引用一个类库,但是我们没有该类库的源代码,那么我们可以使用扩展方法 ,使用扩展方法进行类的扩展。

第一次写博文,望大神多多指点.

时间: 2024-12-15 08:42:58

C#基础之扩展方法的相关文章

C#基础知识---扩展方法

一.简介 扩展方法为现有的类型(.Net类型或者自定义类型)扩展应该附加到该类型中的方法. 二.基本原则 定义一个非嵌套.非泛型的静态类 扩展方法是静态的 扩展方法至少要有一个参数,该参数类型是要扩展的类型 第一个参数必须加上this关键字作为前缀 第一个参数不能用其他任何修饰符(如不能使用ref out等修饰符) 第一个参数的类型不能是指针类型 三.例子 例1:为.Net类型添加扩展方法 1 using System; 2 3 namespace ExtensionMethod 4 { 5 c

ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法

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

c# 扩展方法奇思妙用基础篇五:Dictionary&lt;TKey, TValue&gt; 扩展

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

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

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

C#基础---扩展方法的应用

 最近对扩展方法比较感兴趣,就看了看资料,记录一下扩展方法的几种方法. 一. 扩展方法的基本使用: Note: 1. 扩展方法必须在静态类中, 2 扩展方法必须声明静态方法,3 扩展方法里面不能调用其他自定义方法. public static int TryToInt(this string intStr) { int number = 0; int.TryParse(intStr, out number); return number; } public static IEnumerable<

ASP.NET MVC学前篇之扩展方法、链式编程

前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的是外围的知识,有的是包含在框架内的. MVC学前篇字样?有噱头的成分也有真实的成分,所以工欲善其事,必先利其器.器是什么?基础嘛,虽然说MVC框架中涉及到的知识很多很多也不是我一篇两篇能说完的,我能做的就是知道多少就跟大家分享多少,当然了随着时间的推移会完善这个系列. 1扩展方法 扩展方法是C# 3.0特性里的知识,它用在最多的地方是在Linq中,

为IEnumerable&lt;T&gt;添加RemoveAll&lt;IEnumerable&lt;T&gt;&gt;扩展方法--高性能篇

最近写代码,遇到一个问题,微软基于List<T>自带的方法是public bool Remove(T item);,可是有时候我们可能会用到诸如RemoveAll<IEnumerable<T>>的方法,坦白的说,就是传入的参数是一个IEnumerable<T>,而不是一个T,这种情景是随时可能用到的.当然我们会轻易的发现List<T>里本身就封装了一个方法public int RemoveAll(Predicate<T> match)

artDialog学习之旅(二)之扩展方法详解

名称 描述 核心方法 art.dialog.top 获取artDialog可用最高层window对象.这与直接使用window.top不同,它能排除artDialog对象不存在已经或者顶层页面为框架集的情况这是iframe应用工具集中的核心方法,你可以用它来操作父页面对象(包括上面的对话框) art.dialog.data(name, value) 跨框架数据共享写入接口.框架与框架之间以及与主页面之间进行数据交换是非常头疼的事情,常规情况下你必须知道框架的名称才能进行数据交换,如果是在复杂的多

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

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