C#3.0扩展方法是给现有类型添加一个方法。现在类型既可是基本数据类型(如int,String等),也可以是自己定义的类。

//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扩展方法[转]相关推荐

  1. C# 3.0 —— 扩展方法

    扩展方法是C# 3.0新加入的特性,允许我们在不改变源代码的情况下扩展(即填加)现有类型中的实例方法,也给我们提供了另外一种扩展类型行为的方法(其它的方法为继承.组合.反射). 下面我们来看一个代码示 ...

  2. C# 3.0 扩展方法

    扩展方法解决问题:以往对已存在的类库进行扩展,可行的方式直接对源代码进行修改或者直接派生. 扩展方法注意事项: 扩展方法必须被定义在一个静态类中,扩展方法自身必须是一个静态方法: 扩展方法中的首个参数 ...

  3. C# 3.0新特性之扩展方法

    C#3.0扩展方法是给现有类型添加一个方法.现在类型既可是基本数据类型(如int,String等),也可以是自己定义的类. //Demo--1 //扩展基本类型 namespace TestExten ...

  4. c#扩展方法奇思妙用性能篇一:扩展方法性能初测

    最近写了几篇<c#扩展方法奇思妙用>的文章,一直只是讨论如何扩展.如何使用的问题,几乎没有涉及效率方面. 而大家的回复好多都在问效率如何.性能怎样,也引起了我对效率的关注,今天将初步测试的 ...

  5. .Net 2.0中使用扩展方法

    大家都知道扩展方法是不能直接在2.0中使用的 需要引用一个‍System.Core的dll 不过现在有更加简单的方法了 只要在工程项目中加入以下代码就OK啦 ‍namespace System.Run ...

  6. C#学习笔记四: C#3.0自动属性匿名属性及扩展方法

    前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好 ...

  7. 在.net 2.0/3.0程序中使用扩展方法

    .NET Framework 从2.0升级至3.0/3.5中,增加了不少编译器级别的语法糖,如var关键字.自动属性.Lambda表达式.扩展方法等等. 如果使用vs2008发布.net2.0程序时, ...

  8. [易学C#]C#3.0语言新特性之扩展方法

    当我们需要对已有类的功能进行扩展时,我们通常会想到继承,继承已有类,然后为其加入新的行为.而C# 3.0中加入的扩展方法(Extension Methods)特性,则提供了另一种实现功能扩展的方式. ...

  9. C#3.0新特性 扩展方法

    扩展方法可以使我们为现有的添加方法,现有的类可是是CLB的也可以是自己定义的. 注意事项:   通过this修饰方法第一个参数  方法声明在静态类中  方法通过对象调用 重要注意事项:   扩展方法和 ...

最新文章

  1. Android 存储路径选择
  2. TOMCAT 高并发配置
  3. 7-22 堆栈模拟队列 (25 分)
  4. 利用小工具instsrv和srvany 创建windows服务
  5. c++十进制转二进制_二进制与十进制如何互相转换?
  6. 页表长度和页表大小_在请求调页系统中,若逻辑地址中的页号超过页表控制寄存器中的页表长度,则会引起( ) 。_学小易找答案...
  7. leetcode 700 二叉搜索树的搜索
  8. C# 生成随机数重复问题
  9. ROM 、RAM和FLASH 的区别
  10. win10企业版如何改为专业版?
  11. Fildder主菜单----Edit介绍
  12. matlab向excel连续写数据,每次换行
  13. 计算机的网络功能划分为,计算机网络按功能来划分可分为( )子网和( )子网...
  14. 【tf.keras】官方教程一 Keras overview
  15. 【Java 8 新特性】Java 8 Collectors:joining()使用示例
  16. 电子科技大学人工智能期末复习笔记(四):概率与贝叶斯网络
  17. 环评师c语言题目,C语言考试——编程题_文库吧
  18. MT6853(联发科技天玑 720 )核心板支持5G北斗
  19. 面对 ESM 的开发模式,webpack 还有还手之力吗?(转载)
  20. 编程输入身高h体重w用c语言,C语言必考100题

热门文章

  1. Hi3516A开发--编译整个osdrv目录所遇到的问题总结
  2. 【分布式共识二】拜占庭将军问题----口头协议
  3. Android MediaRecorder架构详解
  4. Hdu 3062. Party
  5. linux 内核配置raid,在 Linux VM 上配置软件 RAID - Azure Virtual Machines | Microsoft Docs
  6. jenkins gitlab php,jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)...
  7. BZOJ-2588-Count-on-a-tree-SPOJ10628-LCA+主席树
  8. hdu5455(2015沈阳网络赛F题)
  9. POJ 3974-Palindrome
  10. BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)