C#3.0扩展方法[转]
//Demo--1 //扩展基本类型 namespace TestExtensionMethods { // 必须建一个静态类,用来包含要添加的扩展方法 public static class Extensions { //要添加的扩展方法必须为一个静态方法 //此方法参数列表必须以this开始 第二个即为要扩展的数据类型,在这里就是要扩展string类型 //第三个就无所谓了,就是一对象名,名字随便,符合命名规则即可 //综合来讲,此方法就是要给string类型添加一个叫TestMethod的方法, 此方法返回一个int型的值,即返回调用此方法对象的长度。 public static int TestMethod(this string s) { return s.Length; } } //测试扩展方法类 class Program { static void Main(string[] args) { string str = "Hello Extension Methods"; //调用扩展方法,必须用对象来调用 int len = str.TestMethod(); Console.WriteLine(len); } } } //Demo--2 //扩展自定义类型,同时展示了扩展方法带参数情况,以及方法重载 namespace TestExtendMethod { public class Student { public string Description() { return "Student............."; } public string Description(string name) { return "the student’s name is "+name; } } // 必须建一个静态类,用来包含要添加的扩展方法 public static class Extensions { //要添加的扩展方法必须为一个静态方法 //此方法参数列表必须以this开始 第二个即为要扩展的数据类型,在这里就是要扩展Student类型 //第三个就无所谓了,就是一对象名,名字随便,符合命名规则即可 //综合来讲,此方法就是要给Student类型添加一个叫TestMethod的方法,此方法返回一个string型的值 public static string TestMethod(this Student s) { return s.Description(); } //要添加的扩展方法必须为一个静态方法 //此方法参数列表第一个参数表示要扩展哪一个类,第二个参数才表示此扩展方法的真正参数 //综合来讲,此方法就是要给Student类型添加一个叫TestMethod的方法, 此方法带有一个string类型的参数,并返回一个string型的值 public static string TestMethod(this Student s,string name) { return s.Description(name); } } //测试扩展方法类 class Program { static void Main(string[] args) { Student stu = new Student(); //调用扩展方法,必须用对象来调用 string mes = stu.TestMethod(); Console.WriteLine(mes); //调用带参数的扩展方法,只要传第二个参数就可以了 //因为他的第一个参数其实只是为了表明是扩展哪个数据类型 mes = stu.TestMethod("李沉舟"); Console.WriteLine(mes); } } } |
总结:
1、扩展方法是给现有类型添加一个方法;
2、扩展方法是通过 指定关键字this修饰方法的第一个参数;
3、扩展方法必须声明在静态类中;
4、扩展方法要通用对象来调用;
5、扩展方法可以带参数。
转载于:https://www.cnblogs.com/leleroyn/archive/2008/05/29/1209832.html
C#3.0扩展方法[转]相关推荐
- C# 3.0 —— 扩展方法
扩展方法是C# 3.0新加入的特性,允许我们在不改变源代码的情况下扩展(即填加)现有类型中的实例方法,也给我们提供了另外一种扩展类型行为的方法(其它的方法为继承.组合.反射). 下面我们来看一个代码示 ...
- C# 3.0 扩展方法
扩展方法解决问题:以往对已存在的类库进行扩展,可行的方式直接对源代码进行修改或者直接派生. 扩展方法注意事项: 扩展方法必须被定义在一个静态类中,扩展方法自身必须是一个静态方法: 扩展方法中的首个参数 ...
- C# 3.0新特性之扩展方法
C#3.0扩展方法是给现有类型添加一个方法.现在类型既可是基本数据类型(如int,String等),也可以是自己定义的类. //Demo--1 //扩展基本类型 namespace TestExten ...
- c#扩展方法奇思妙用性能篇一:扩展方法性能初测
最近写了几篇<c#扩展方法奇思妙用>的文章,一直只是讨论如何扩展.如何使用的问题,几乎没有涉及效率方面. 而大家的回复好多都在问效率如何.性能怎样,也引起了我对效率的关注,今天将初步测试的 ...
- .Net 2.0中使用扩展方法
大家都知道扩展方法是不能直接在2.0中使用的 需要引用一个System.Core的dll 不过现在有更加简单的方法了 只要在工程项目中加入以下代码就OK啦 namespace System.Run ...
- C#学习笔记四: C#3.0自动属性匿名属性及扩展方法
前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好 ...
- 在.net 2.0/3.0程序中使用扩展方法
.NET Framework 从2.0升级至3.0/3.5中,增加了不少编译器级别的语法糖,如var关键字.自动属性.Lambda表达式.扩展方法等等. 如果使用vs2008发布.net2.0程序时, ...
- [易学C#]C#3.0语言新特性之扩展方法
当我们需要对已有类的功能进行扩展时,我们通常会想到继承,继承已有类,然后为其加入新的行为.而C# 3.0中加入的扩展方法(Extension Methods)特性,则提供了另一种实现功能扩展的方式. ...
- C#3.0新特性 扩展方法
扩展方法可以使我们为现有的添加方法,现有的类可是是CLB的也可以是自己定义的. 注意事项: 通过this修饰方法第一个参数 方法声明在静态类中 方法通过对象调用 重要注意事项: 扩展方法和 ...
最新文章
- Android 存储路径选择
- TOMCAT 高并发配置
- 7-22 堆栈模拟队列 (25 分)
- 利用小工具instsrv和srvany 创建windows服务
- c++十进制转二进制_二进制与十进制如何互相转换?
- 页表长度和页表大小_在请求调页系统中,若逻辑地址中的页号超过页表控制寄存器中的页表长度,则会引起( ) 。_学小易找答案...
- leetcode 700 二叉搜索树的搜索
- C# 生成随机数重复问题
- ROM 、RAM和FLASH 的区别
- win10企业版如何改为专业版?
- Fildder主菜单----Edit介绍
- matlab向excel连续写数据,每次换行
- 计算机的网络功能划分为,计算机网络按功能来划分可分为( )子网和( )子网...
- 【tf.keras】官方教程一 Keras overview
- 【Java 8 新特性】Java 8 Collectors:joining()使用示例
- 电子科技大学人工智能期末复习笔记(四):概率与贝叶斯网络
- 环评师c语言题目,C语言考试——编程题_文库吧
- MT6853(联发科技天玑 720 )核心板支持5G北斗
- 面对 ESM 的开发模式,webpack 还有还手之力吗?(转载)
- 编程输入身高h体重w用c语言,C语言必考100题
热门文章
- Hi3516A开发--编译整个osdrv目录所遇到的问题总结
- 【分布式共识二】拜占庭将军问题----口头协议
- Android MediaRecorder架构详解
- Hdu 3062. Party
- linux 内核配置raid,在 Linux VM 上配置软件 RAID - Azure Virtual Machines | Microsoft Docs
- jenkins gitlab php,jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)...
- BZOJ-2588-Count-on-a-tree-SPOJ10628-LCA+主席树
- hdu5455(2015沈阳网络赛F题)
- POJ 3974-Palindrome
- BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)