.NET 扩展方法(Extention Method)的要点

扩展方法Extention Method的主要介绍在:http://msdn.microsoft.com/zh-cn/library/bb383977(v=vs.100).aspx

扩展方法能够向已存在的类型(这时称为Extended Type)添加方法,而无需修改该类型。

关于扩展方法的几个要点是:

  1. 扩展方法被定义为“静态方法(static method)”,但是调用时使用的是“实例方法(instance
    method)”的语法(即在对象而非类后面写"."调用)的语法;

  2. “扩展方法被定义为静态方法”的含义是:扩展方法一般被定义为静态类的静态方法;这个静态方法的第一个参数指定本方法所适用的类型(称为Extended
    Type),该参数以this修饰符为前缀(一个静态类中是可以为多个Extended
    Type定义扩展方法的吧?);从这个实现上来看,扩展方法是无法访问Extended Type对象的实例成员的;

  3. 仅当使用using指令将包含扩展方法类的命名空间导入源代码后,才可以使用该扩展方法;

  4. 扩展方法的编译绑定方法决定了:(1)扩展方法不能被重写;(2)扩展方法与实例方法签名相同时,扩展方法永远不会被调用;

  5. 基于以上的4和其他理由,应该在必要时才使用扩展方法扩展已存在的类型(应该优先使用派生已存在类型的新类型来实现扩展的目的);

.NET 扩展方法(Extention Method)的要点,布布扣,bubuko.com

时间: 2024-12-12 09:17:46

.NET 扩展方法(Extention Method)的要点的相关文章

C# 扩展方法Extension Method

C# .NET Framewoke 3.0就引入的新特性,提供了扩展.NET类方法的途径,可以增加代码的美观性! 编写扩展方法有下面几个要求: 扩展方法所在的类必须是全局的,不能是内部嵌套类, 扩展方法的类必须是静态类. 扩展方法必须是静态方法. 扩展方法的第一个参数的数据类型必须是要扩展类型且使用this关键字. 扩展方法定义: public static class CExLongMethed { //无参无返回值 public static void Print(this long l)

C#扩展方法(Extend Method)

在不更改原来类的基础上,为类添加方法. 1,扩展方法必须写静态类中 2,扩展方法必须是静态方法,虽然是静态方法,但是这个扩张方法是为对象扩展的,只能由对象调用. public static class 类名 { public static 返回值 方法名(this 要扩展的类型 对象名[,参数列表]) { } } static class Extend { public static TSource Test123<TSource>(this IEnumerable<TSource>

在jQuery定义自己的扩展方法函数

今早复习昨天的练习jQuery的DropDownList联动功能,如果想看回<jQuery实现DropDownList(MVC)>http://www.cnblogs.com/insus/p/3413749.html 和<jQuery实现两个DropDownList联动(MVC)>http://www.cnblogs.com/insus/p/3414480.html .发觉一些jQuery代码冗余.如: 上图中,高亮部分的代码将会是产生冗余,它只是对象不相同而已.jQuery是否也

C#创建自己的扩展方法

C#可以创建自己的扩展方法Extension Method: 参考这篇<判断是否为空然后赋值>http://www.cnblogs.com/insus/p/8004097.html 里,前面三个方法,均出现null这关键词,在判断时,你需要== null或者!=null. 其实你完全可以创建C#的扩展方法来消除这种的繁杂. public static class ExtensionMethod { public static bool IsNull(this object obj) { ret

ABP框架源码中的Linq扩展方法

文件目录:aspnetboilerplate-dev\aspnetboilerplate-dev\src\Abp\Collections\Extensions\EnumerableExtensions.cs using System; using System.Collections.Generic; using System.Linq; namespace Abp.Collections.Extensions { /// <summary> /// Extension methods for

C#原始类型扩展方法—this参数修饰符

扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用.对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异. 扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的.它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀.仅当您使用 using 指令将命名空间显式导入到源代码中之后,扩

Extension Methods(扩展方法)

在 OOPL 中,有静态方法.实例方法和虚方法,如下: public sealed class String { public static bool  IsNullOrEmpty(string s) { // ... } public string Replace(string old, string new) { // ... } } public abstract class Stream { public virtual void WriteByte(byte value) { // .

扩展方法(为那些已经写好不能修改源码的类添加方法)

参考:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/how-to-implement-and-call-a-custom-extension-method 本主题介绍如何实现 .NET Framework 类库 中任意类型的扩展方法,或是你想要扩展的任何其他 .NET 类型. 客户端代码可以通过以下方法使用扩展方法,添加包含这些扩展方法的 DLL 的引用,以及添加 usin

dotnetCore增加MiddleWare的Run,Use Map MapThen四个扩展方法

什么是中间件 中间件是在管道中处理Request请求与Responses响应的一种组件,每种组件可以选择是否让Request进入到下一个组件去处理. 译得不好,大家可以自己看原文Middleware 更详细的还可以参照园中大神的作品: 有汤姆大叔的解读ASP.NET 5 & MVC6系列(6):Middleware详解 artech大神的 ASP.NET Core真实管道详解[1]:中间件是个什么东西? 怎么创建一个Middleware请参考英文文档Middleware 或者 LineZero的