简单介绍C# 中的扩展方法

扩展方法是C#3.0引入的新特性,使用它,可以在不修改某一类的代码的情况下,实现该类方法的扩展。

为一个类添加扩展方法,需要三个要素:

1.扩展方法所在的类为静态类

2.扩展方法本身要为静态方法

3.扩展方法的第一个参数要用关键字this,指向要扩展的类

下面请看一个实例:

//静态类
 public static class TestExtensionM
 {
 //静态方法
 public static int ExtensionInt(this int s) //this关键字
 {
  return s + s;
 }
 }

这个扩展方法是服务于int类型的,返回它自己的2倍;

使用方法也很简单:

 int a = 9;
 a = a.ExtensionInt();
 Debug.WriteLine(a);

a为9,调用扩展方法以后,也看到了正确返回结果18

实际上也可以用: int.Add(a)的形式使用,但显然上图所示的更加简单易用。

扩展方法,也可以传入参数:

//静态类
 public static class TestExtensionM
 {
 //静态方法
 public static int ExtensionInt(this int s,int a) //this关键字
 {
  return s + a;
 }
 }

使用的时候,传入对应的参数即可

 int a = 9;
 a = a.ExtensionInt(6);
 Debug.WriteLine(a);

这种灵活的方式,可以让我们的开发更便捷,但是不要滥用扩展方法,当扩展方法与类原始的方法重名时,原始方法的优先级高于扩展方法,并且对于系统类,不要随便添加扩展方法。

以上就是C# 中的扩展方法简介的详细内容,更多关于c# 扩展方法的资料请关注我们其它相关文章!

(0)

相关推荐

  • C# Winform使用扩展方法实现自定义富文本框(RichTextBox)字体颜色

    在利用C#开发Winform应用程序的时候,我们有可能使用RichTextBox来实现实时显示应用程序日志的功能,日志又分为:一般消息,警告提示和错误等类别.为了更好地区分不同类型的日志,我们需要使用不同的颜色来输出对应的日志,比如:一般消息为绿色,警告提示的用橙色,错误的用红色字体. 在原生Winform的RichTextBox中,是没有这种设置选项的.如需实现以上描述的功能,我们可以使用.NET的静态扩展方法来处理.实现扩展方法的类和方法本身都必须是静态的,如果你对扩展方法还不是太了解,建议

  • C#获取图片文件扩展名的方法

    下面我给各位朋友整理了一篇C# 获取图片文件扩展名的例子,这里方法都非常的简单,我们只用到了image.RawFormat.Guid就实现了,具体看代码 例子 复制代码 代码如下: /// <summary> /// 根据图像获取图像的扩展名 /// </summary> /// <param name="image"></param> /// <returns></returns> public static S

  • 深入理解C#中的扩展方法

    扩展方法(Extension Methods)是C#3.0时引入的新特性,相信很多人都听过并且也都用过,最常见的是在LINQ中的使用. 不仅如此,在开发中,我们也可以创建自己扩展方法,使用它来优化类的设计.简化代码.本文将简单地介绍扩展方法的概念.定义.使用场景以及要注意的点. 一.概念 扩展方法是一种特殊类型的静态方法.对于一个C#类型,如类(包括密封类).值类型.接口等,扩展方法可以在不改变该类型源码的前提下,为它的实例提供新的成员.因此,若要为一个框架或第三方库的某个类型增加辅助功能,通过

  • 详解C#扩展方法原理及其使用

    1.写在前面 今天群里一个小伙伴问了这样一个问题,扩展方法与实例方法的执行顺序是什么样子的,谁先谁后(这个问题会在文章结尾回答).所以写了这边文章,力图从原理角度解释扩展方法及其使用. 以下为主要内容: 什么是扩展方法 扩展方法原理及自定义扩展方法 扩展方法的使用及其注意事项 2.什么是扩展方法 一般而言,扩展方法为现有类型添加新的方法(从面向对象的角度来说,是为现有对象添加新的行为)而无需修改原有类型,这是一种无侵入而且非常安全的方式.扩展方法是静态的,它的使用和其他实例方法几乎没有什么区别.

  • C#动态加载dll扩展系统功能的方法

    本文实例讲述了C#动态加载dll扩展系统功能的方法.分享给大家供大家参考.具体分析如下: 动态加载dll,主要是为了扩展功能,增强灵活性而实现的.主要通过xml配置,来获取所有要动态加载的dll,然后通过反射机制来调用dll中的类及其方法. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; u

  • C#中this用法系列(二) 通过this修饰符为原始类型扩展方法

    定义一个静态类,类中定义静态方法,方法中参数类型前边加上this修饰符,即可实现对参数类型的方法扩展 示例如 namespace Demo{ // 这里的类必须为静态类 public static class Json { // 方法为静态方法 // this修饰符后边是string类型,即为string类型扩展出了ToJson方法 public static object ToJson(this string Json) { return Json == null ? null : JsonC

  • 解析C#的扩展方法

    在使用面向对象的语言进行项目开发的过程中,较多的会使用到"继承"的特性,但是并非所有的场景都适合使用"继承"特性,在设计模式的一些基本原则中也有较多的提到. 继承的有关特性的使用所带来的问题:对象的继承关系实在编译时就定义好了,所以无法在运行时改变从父类继承的实现.子类的实现与它父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化.当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写它或被其他更适合的类替换,这种依赖关系限制

  • C#实现listview Group收缩扩展的方法

    本文实例讲述了C#实现listview Group收缩扩展的方法.分享给大家供大家参考,具体如下: 1.本实例是完善了codeprofect上面charju老师"Add Group Collapse Behavior on a Listview Control"的一个限制(点击分组后面的图标不能收缩和扩展): 2.本实列适用于win2008,vista: 3.仅供参考,如有更好的方法,望大家不吝交流~ 完整代码如下(只需建一个windows工程,在窗体上拖一个listview控件,取名

  • C#获取并修改文件扩展名的方法

    本文实例讲述了C#获取并修改文件扩展名的方法.分享给大家供大家参考.具体分析如下: 这里使用C#编程的方法改变文件扩展名的文件,必须使用Path类. Path类用来解析文件系统路径的各个部分.静态方法Path.ChangeExtension方法可以用来改变文件扩展名.可用Path.GetExtension方法可用来取得的文件扩展名. 复制代码 代码如下: string filePath = @"c:\file.txt"; Console.WriteLine(filePath); Con

  • 简单介绍C# 中的扩展方法

    扩展方法是C#3.0引入的新特性,使用它,可以在不修改某一类的代码的情况下,实现该类方法的扩展. 为一个类添加扩展方法,需要三个要素: 1.扩展方法所在的类为静态类 2.扩展方法本身要为静态方法 3.扩展方法的第一个参数要用关键字this,指向要扩展的类 下面请看一个实例: //静态类 public static class TestExtensionM { //静态方法 public static int ExtensionInt(this int s) //this关键字 { return

  • 简单介绍Python中的readline()方法的使用

    readline()方法从文件中读取一整行.尾部的换行符保持在字符串中.如果大小参数且非负,那么一个最大字节数,包括结尾的换行和不完整的行可能会返回. 遇到EOF时立即返回一个空字符串. 语法 以下是readline()方法的语法: fileObject.readline( size ); 参数 size -- 这是可以从文件中读取的字节数. 返回值 此方法返回从文件中读取的行. 例子 下面的例子显示了readline()方法的使用. #!/usr/bin/python # Open a fil

  • 简单介绍Python中的floor()方法

    floor()方法返回不大于x的最大整数(向下取整). 语法 以下是floor()方法的语法: import math math.floor( x ) 注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用这个函数. 参数 x -- 这是一个数值表达式. 返回值 此方法返回不大于x的最大整数. 例子 下面的例子显示了floor()方法的使用. #!/usr/bin/python import math # This will import math mod

  • 简单介绍Python中的round()方法

    round()方法返回 x 的小数点四舍五入到n个数字. 语法 以下是round()方法的语法: round( x [, n] ) 参数 x --这是一个数值表达式 n --这也是一个数值表达式 返回值 该方法返回 x 的小数点四舍五入到n个数字 例子 下面的例子显示了round()方法的使用 #!/usr/bin/python print "round(80.23456, 2) : ", round(80.23456, 2) print "round(100.000056,

  • 简单介绍Python中的decode()方法的使用

    decode()方法使用注册编码的编解码器的字符串进行解码.它默认为默认的字符串编码. 语法 以下是decode()方法的语法: str.decode(encoding='UTF-8',errors='strict') 参数 encoding -- 这是所使用的编码.对于所有的编码方案的列表,请访问:标准编码库 errors -- 这可能是给定一个不同的错误处理机制.默认的错误是"严格",即编码错误提出UnicodeError.其他可能的值是ignore', 'replace', 'x

  • 简单介绍java中equals以及==的用法

    简单介绍 equals方法是java.lang.Object类的方法有两种用法说明: 一.对于字符串变量来说,使用"=="和"equals()"方法比较字符串时,其比较方法不同. 1."=="比较两个变量本身的值,即两个对象在内存中的首地址.(java中,对象的首地址是它在内存中存放的起始地址,它后面的地址是用来存放它所包含的各个属性的地址,所以内存中会用多个内存块来存放对象的各个参数,而通过这个首地址就可以找到该对象,进而可以找到该对象的各个属

  • 简单介绍Python虚拟环境及使用方法

    一.为什么需要虚拟环境? 这里的环境,指的就是 Python 代码的运行环境.它应该包含以下信息: Python 解释器,用哪个解释器来执行代码? Python 库的位置,该去哪里 import 所需要的模块? 可执行程序的位置,比如说安装了 pip,那么 pip 命令是在哪里? 由于每个项目的情况都可能不一样,比如这个项目用的是vtk 7.1,另一个项目用的是vtk 9.0.如果不进行环境隔离而是全局安装,就会导致包的冲突从而出现问题,这个时候让每个项目都拥有一套独立的Python环境,这样就

  • asp.net中CSharpThinking扩展方法分析

    本文实例讲述了asp.net中CSharpThinking扩展方法.分享给大家供大家参考.具体分析如下: 一.演变 ① 扩展方法特征 1)必须在一个静态方法中. 2)至少有一个参数. 3)第一个参数必须附加this关键字作为前缀. 4)第一个参数不能有其他任何修饰符(如 out,ref). 5)第一个参数的类型不能是指针. 6) 如果扩展方法名称与类型的方法一样(如都命名为ToString),则只有类型的方法会被调用,而扩展方法的不会,这是一个优先级问题. ② 扩展方法与普通静态方法的比较 C#

  • 简单介绍Python中的几种数据类型

    大体上把Python中的数据类型分为如下几类: Number(数字) 包括int,long,float,complex String(字符串) 例如:hello,"hello",hello List(列表) 例如:[1,2,3],[1,2,3,[1,2,3],4] Dictionary(字典) 例如:{1:"nihao",2:"hello"} Tuple(元组) 例如:(1,2,3,abc) Bool(布尔) 包括True.False 由于Pyt

  • 简单介绍Python中的RSS处理

    RSS 是一个可用多种扩展来表示的缩写:"RDF 站点摘要(RDF Site Summary)"."真正简单的辛迪加(Really Simple Syndication)"."丰富站点摘要(Rich Site Summary)",也许还能用其他扩展来表示.在如此混乱的名称背后,您会发现和这样一个平凡的技术领域相关的故事多得令人吃惊.RSS 是用于分发 Web 站点上的内容的摘要的一种简单的 XML 格式.它能够用于共享各种各样的信息,包括(但不是

随机推荐