在实际应用中,开发者完成代码的编译后,除非重新编译更改后的代码,否则开发者很难在原有代码中添加新的功能.
在C#3.0中,提供了一个扩展方法的新特性,可以使得开发者在编译后的程序集里边添加相关的方法,从而很容易地扩展原有的功能.
1、扩展方法的定义 代码生成器
定义扩展方法时,首先这个扩展方法要被定义在一个静态类中(程序集加载时自动加载),因此这个扩展方法也必须是一个静态方法。其次,在扩展方法的参数列表中,需要在第一个参数类型的前面添加关键字this作为修饰符,而紧跟其后的就是扩展类的名称。如下所示:
代码:扩展方法的定义
static class MyExtensions { public static string GetAssemblyName(this object obj) { return obj.GetType().Name; } }
在上述代码中,定义了一个静态类MyExtension,其中定义了一个扩展方法GetAssemblyName()。在该方法的参数列表中,使用了关键字this来修饰object类型,将扩展方法与object相关联。因此,对于任何object对象和继承了object类的类,都可以使用GetAssemblyName()方法,从而扩展了object的方法。
2、扩展方法的使用
使用扩展方法,既可以调用关联类型实例化对象的扩展方法,也可以直接调用静态类中的扩展方法,其中的方法参数输入关联类型。
代码: 实例化对象的扩展方法
static void Main(string[] args) { object obj = new object(); obj.GetAssemblyName(); }
在代码中,定义了一个object类型的参数obj,并调用obj类型的扩展方法GetAssemblyName,获取Assembly的名称.
当书写代码时,在VS环境中,开发者可以利用只能感知功能,比较容易地选择扩展方法.如下图所示:
此外还可以针对泛型类型添加扩展方法,这样开发者就可以在制定的泛型类中使用扩展方法。俺还不是很理解泛型,暂时不显摆了。
C#3.0中的扩展方法的更多相关文章
-
objective-C中的扩展方法与partial class
在c#中要扩展一个现有类非常easy,比方这样: ? 1 2 3 4 5 6 7 public static class Utils { public static void PrintTo ...
-
c#3.0提供的扩展方法
在c#3.0之前,想要为内置的类型添加一个方法显然是不可能的.但是,c#3.0提供的扩展方法可以解决这个问题.具体代码如下: public static class ExtendedClass {pu ...
-
记录C#中的扩展方法
C#中的扩展方法. 系统自带的类型,我们无法去修改: 修改源代码需要较大的精力,而且可能会带来错误: 我们只是需要一个或者较少的几个方法,修改源代码费时费力: 被扩展的类是sealed的,不能被继承: ...
-
C#编程(六十一)------------LINQ中的扩展方法
原文链接: http://blog.csdn.net/shanyongxu/article/details/47208401 LINQ中的扩展方法 LINQ中where扩展方法,要想使用,必须导入us ...
-
在 Flash ActionScript 2.0 中调用 Javascript 方法
本篇文章由:http://xinpure.com/call-the-javascript-method-in-flash-actionscript-2-0/ 在 Flash ActionScript ...
-
C#中的扩展方法(向已有类添加方法,但无需创建新的派生类型)
C#中的扩展方法 扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...
-
MVC 中使用扩展方法
扩展方法(Extension Method)是给那些不是你拥有.因而不能直接修改的类添加方法的一种方便的办法. 一.使用扩展方法 1.定义一个购物车的类-ShoppingCart using Sys ...
-
C# 3.0 特性之扩展方法
今天,我们来聊一聊C#的扩展方法. C# 3.0中为我们提供了一个新的特性—扩展方法.什么是扩展方法呢?我们看一下MSDN的注解: 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新 ...
-
.NET: 谈谈C#中的扩展方法
扩展方法(Extension Methods)是C#3.0时引入的新特性,相信很多人都听过并且也都用过,最常见的是在LINQ中的使用. 不仅如此,在开发中,我们也可以创建自己扩展方法,使用它来优化类的 ...
随机推荐
-
Solr学习总结(一)Solr介绍
最近一直在搞Solr的问题,研究Solr 的优化,搜索引擎的bug修改等,这几天终于有时间,闲下来总结分享,以便大家参考,与大家一起来共同学习. Solr是一个基于Lucene的全文搜索引擎,同 ...
-
内省(Introspector)
内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法 目的:主要用于传递数据信息,这种类中的方法主要用于访问私有的字段(且方法名符合某种命名规则) p ...
-
HeadFirst设计模式之状态模式
一. 1. 2.The State Pattern allows an object to alter its behavior when its internal state changes. Th ...
-
C#中配置文件的使用
1. 向项目添加app.config文件: 右击项目名称,选择“添加”→“添加新建项”,在出现的“添加新项”对话框中,选择“添加应用程序配置文件”:如果项目以前没有配置文件,则默认的文件名称为“app ...
-
Loggerly技术架构
https://www.loggly.com/blog/topic/log-management-technology/
-
开发工具类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等
以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数 ...
-
17. 判断是否IE浏览器
var isNotIE = !window.VBArray; //判断是否IE浏览器 if(isNotIE) { //如果不是IE浏览器 $("#da ...
-
一份可以发布jar包到MAVEN*仓库的POM
[2017-01-03 更新]将基础的pom抽离成一个项目无关的parent pom,euler-framework的pom继承这个parent pom 今天在家折腾了一下怎么把Jar包发布到Mave ...
-
[整理]标准C中的";布尔";类型
C语言提供的基本数据类型:char , int ,float, double. 为什么没有其他语言中常见bool布尔数据类型呢? 1.在标准C语言(ANSI C)中并没有bool数据类型 标准C中,表 ...
-
一头扎进Spring之---------Spring七大核心模块
Spring七大核心模块 核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.Spring使用BeanF ...