C#3.0新特性之扩展方法介绍
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.扩展方法是通过 指定关键字 t his 修 饰方法的第一个参数
3.扩展方法必须声明在静态类中
4.扩展方法要通用对象来调用
5.扩展方法可以带参数
C#3.0新特性之扩展方法介绍的更多相关文章
- C# 7.0 新特性:本地方法
C# 7.0:本地方法 VS 2017 的 C# 7.0 中引入了本地方法,本地方法是一种语法糖,允许我们在方法内定义本地方法.更加类似于函数式语言,但是,本质上还是基于面向对象实现的. 1. 本地方 ...
- 背水一战 Windows 10 (1) - C# 6.0 新特性
[源码下载] 背水一战 Windows 10 (1) - C# 6.0 新特性 作者:webabcd 介绍背水一战 Windows 10 之 C# 6.0 新特性 介绍 C# 6.0 的新特性 示例1 ...
- 返璞归真 asp.net mvc (6) - asp.net mvc 2.0 新特性
原文:返璞归真 asp.net mvc (6) - asp.net mvc 2.0 新特性 [索引页][源码下载] 返璞归真 asp.net mvc (6) - asp.net mvc 2.0 新特性 ...
- 转载 精进不休 .NET 4.0 (5) - C# 4.0 新特性之并行运算(Parallel) https://www.cnblogs.com/webabcd/archive/2010/06/03/1750449.html
精进不休 .NET 4.0 (5) - C# 4.0 新特性之并行运算(Parallel) 介绍C# 4.0 的新特性之并行运算 Parallel.For - for 循环的并行运算 Parall ...
- 背水一战 Windows 10 (43) - C# 7.0 新特性
[源码下载] 背水一战 Windows 10 (43) - C# 7.0 新特性 作者:webabcd 介绍背水一战 Windows 10 之 C# 7.0 新特性 介绍 C# 7.0 的新特性 示例 ...
- 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性
[索引页][源码下载] 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性 作者:webabcd 介绍asp.net mvc 之 asp.net mvc 5.0 新 ...
- C# 7.0 新特性2: 本地方法
本文参考Roslyn项目中的Issue:#259. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...
- C# 7.0 新特性1: 基于Tuple的“多”返回值方法
本文基于Roslyn项目中的Issue:#347 展开讨论. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: ...
- Visual Studio 2015速递(1)——C#6.0新特性怎么用
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
随机推荐
- codeforces 425D
题意:给定n<=100000个二维点,并且0<=x,y<=100000,求有多少个平行于坐标轴的正方形 思路:本来想hash的,但是感觉不好弄.. 后来感觉像是分块,最坏的情况就是那 ...
- A memory leak issue with WPF Command Binding
Background In our application, we have a screen which hosts several tabs. In each tab, it contains a ...
- 杂记- 3W互联网的圈子,大数据敏捷BI与微软BI的前端痛点
开篇介绍 上周末参加了一次永洪科技在中关村 3W 咖啡举行的一次线下沙龙活动 - 关于它们的产品大数据敏捷 BI 工具的介绍.由此活动,我想到了三个话题 - 3W 互联网的圈子,永洪科技的大数据敏捷 ...
- Oracle 创建主键自增表
200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要介绍在oracle中如果创建自增长表,这里要用到序列. create ...
- 04-Vue入门系列之Vue事件处理
4.1. 监听事件的Vue处理 Vue提供了协助我们为标签绑定时间的方法,当然我们可以直接用dom原生的方式去绑定事件.Vue提供的指令进行绑定也是非常方便,而且能让ViewModel更简洁,逻辑更彻 ...
- Maven之Hello World入门实例
1.使用eclipse创建maven工程在eclipse中,选择新建工程的时候,选择other,找到maven 下一步,下一步,直到出现类似如下图片点击finish即可完成maven工程创建. 运行的 ...
- C#动态加载树菜单
在做权限系统的时候,需要有一个树形的菜单.下图就是一个树形菜单的样式 但问题是,我们可以实现写死的树形菜单.什么是写死的?就是在前台代码中写好要加载的树形菜单是什么样子的.但是我们权限系统的要求是动态 ...
- [读书笔记]C#学习笔记四: C#2.0泛型 可控类型 匿名方法和迭代器
前言 C#1.0的委托特性使方法作为其他方法的参数来传递,而C#2.0 中提出的泛型特性则使类型可以被参数化,从而不必再为不同的类型提供特殊版本的实现方法.另外C#2.0还提出了可空类型,匿名方法和迭 ...
- 在ASP.NET MVC5中建置以角色为基础的授权机制
在前一篇贴文中,已探索过如何在MVC5中自定ASP.NET Identity,接下来要来试试在MVC5中如何运用 ASP.NET Identity来设定一个以 "角色"为基础的授权 ...
- atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException
atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException #--现象 java.lang.NullPoint ...