.NET 扩展方法(Extention Method)的要点
扩展方法Extention Method的主要介绍在:http://msdn.microsoft.com/zh-cn/library/bb383977(v=vs.100).aspx。
扩展方法的意义在于:
- 能够向已存在的类型(这时称为Extended Type)添加方法,而无需修改该类型(从而实现开发-封闭原则)。这个(1)是不是有点儿类似于“装饰”模式?(2)如果已经存在的类型因为某种原因是不可修改的,或不想打开进行修改,则可以使用扩展方法为该类型添加方法。
- 可以实现依赖倒置,从而解除三个组件之间的循环依赖(注意是解除三个组件之间的循环依赖,而不是两个组件之间的依赖翻转)。怎么讲呢?如
关于扩展方法的几个要点是:
- 扩展方法被定义为“静态方法(static method)”,但是调用时使用的是“实例方法(instance method)”的语法(即在对象而非类后面写"."调用)的语法;
- “扩展方法被定义为静态方法”的含义是:扩展方法一般被定义为静态类的静态方法;这个静态方法的第一个参数指定本方法所适用的类型(称为Extended Type),该参数以this修饰符为前缀(一个静态类中是可以为多个Extended Type定义扩展方法的吧?);从这个实现上来看,扩展方法是无法访问Extended Type对象的实例成员的;
- 仅当使用using指令将包含扩展方法类的命名空间导入源代码后,才可以使用该扩展方法;
- 扩展方法的编译绑定方法决定了:(1)扩展方法不能被重写;(2)扩展方法与实例方法签名相同时,扩展方法永远不会被调用;
- 基于以上的4和其他理由,应该在必要时才使用扩展方法扩展已存在的类型(应该优先使用派生已存在类型的新类型来实现扩展的目的);
.NET 扩展方法(Extention Method)的要点的更多相关文章
- [译文]c#扩展方法(Extension Method In C#)
原文链接: https://www.codeproject.com/Tips/709310/Extension-Method-In-Csharp 介绍 扩展方法是C# 3.0引入的新特性.扩展方法使你 ...
- [0] C# 扩展方法(Extension Method)
有时有这样的情况,有一个类,你不能修改它,但你又想对它扩展(添加一个方法),这个时候就可以用到扩展方法了.请看下面的例子: using System;using System.Collections. ...
- C#创建自己的扩展方法
C#可以创建自己的扩展方法Extension Method: 参考这篇<判断是否为空然后赋值>http://www.cnblogs.com/insus/p/8004097.html 里,前 ...
- 在jQuery定义自己的扩展方法函数
今早复习昨天的练习jQuery的DropDownList联动功能,如果想看回<jQuery实现DropDownList(MVC)>http://www.cnblogs.com/insus/ ...
- [C#] Extension Method 扩展方法
当我们引用第三方的DLL.或者Visual Studio自己的库的时候,或许会发现这样的一个情况,如果这个类型有一个XX的方法就好了.这时候我们可以用到扩展方法,是我们的代码更加灵活和高效. 这里我举 ...
- C# Note21: 扩展方法(Extension Method)及其应用
前言 今天在开会时提到的一个概念,入职3个多月多注重在项目中使用C#的编程知识,一直没有很认真地过一遍C#的全部语法,当我们新人被问及是否了解Extension Method时,一时之间竟不能很通俗准 ...
- c#编程指南(五) 扩展方法(Extension Method)
C# 3.0就引入的新特性,扩展方法可以很大的增加你代码的优美度,扩展方法提供你扩展.NET Framewoke类的扩展途径,书写和规则也简单的要命. 编写扩展方法有下面几个要求: 第一:扩展方法所在 ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
- 为IEnumerable<T>添加RemoveAll<IEnumerable<T>>扩展方法--高性能篇
最近写代码,遇到一个问题,微软基于List<T>自带的方法是public bool Remove(T item);,可是有时候我们可能会用到诸如RemoveAll<IEnumerab ...
随机推荐
- 通过VS创建简单的WCF服务
http://www.cnblogs.com/artech/archive/2007/09/15/893838.html http://www.topwcftutorials.net/2013/09/ ...
- 首师大附中互测题:99999999海岛帝国后传:算法大会【D001】
[D001]99999999海岛帝国后传:算法大会[难度:D] ———————————————————————————————————————————————————————————————————— ...
- 用于异步的BackgroundWorker
XAML代码: <Window x:Class="backgroundtest.MainWindow" xmlns="http://schemas.microsof ...
- jsonp模拟获取百度搜索相关词汇
随便写了个jsonp模拟百度搜索相关词汇的小demo,帮助新手理解jsonp的用法. <!DOCTYPE html><html lang="en">< ...
- ArrayFire与CUDA环境配置问题
1.ArrayFire与cuda版本不一致时的解决方案 以Visual Studio2013为例,在工程-属性-C/C++--预处理加入宏AFCL,即可解决.
- SqlServer操作大全
一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...
- python递归实现折半查找
1.Python 基础教程版:(有点没想清楚) def search(sequence, number, lower=0, upper=None): if upper is None: upper = ...
- JavaScript 数组操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 深入浅出Android App耗电量统计
前言 在Android统计App耗电量比较麻烦,直至Android 4.4,它仍没公开“电量统计”API或文档……额,是的,仅没有公开,并不是没有.平时在手机“设置- 电量”看到的数据 就是系统调用内 ...
- 数据字典生成工具之旅(5):DocX组件读取与写入Word
由于上周工作比较繁忙,所以这篇文章等了这么久才写(预告一下,下一个章节正式进入NVelocity篇,到时会讲解怎么使用NVelocity做一款简易的代码生成器,敬请期待!),好了正式进入本篇内容. 这 ...