博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 扩展方法整理
阅读量:4287 次
发布时间:2019-05-27

本文共 1206 字,大约阅读时间需要 4 分钟。

一、功能定义

1.扩展方法使你能够向现有类型“添加”方法而无需创建新的派生类型、重新编译或以其他方式修改原始类型

2. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。 

3.对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。

二、使用语法规则

1.扩展方法被定义在静态类的静态方法,但它们是通过实例方法语法进行调用的。 

2.它们的第一个参数指定该方法作用于哪个类型,并且该参数以  修饰符为前缀

3. 仅当你使用 using 指令将命名空间显式导入到源代码中之后,扩展方法才位于范围中。

三、简单示例

/// /// 扩展方法/// public static class ExtendMethod{    public static string ToMyString(this string str)    {        return typeof(ExtendMethod).FullName + "--测试:" + str;    }}

使用方式如下:

Console.WriteLine("abc".ToMyString());

四、更多说明

可以使用扩展方法来扩展类或接口,但不能重写扩展方法。 与接口或类方法具有相同名称和签名的扩展方法永远不会被调用。 编译时,扩展方法的优先级总是比类型本身中定义的实例方法低。 换句话说,如果某个类型具有一个名为 Process(int i) 的方法,而你有一个具有相同签名的扩展方法,则编译器总是绑定到该实例方法。 当编译器遇到方法调用时,它首先在该类型的实例方法中寻找匹配的方法。 如果未找到任何匹配方法,编译器将搜索为该类型定义的任何扩展方法,并且绑定到它找到的第一个扩展方法。

通常,建议你只在不得已的情况下才实现扩展方法,并谨慎地实现。 只要有可能,必须扩展现有类型的客户端代码都应该通过创建从现有类型派生的新类型来达到这一目的。 有关详细信息,请参阅

在使用扩展方法来扩展你无法更改其源代码的类型时,你需要承受该类型实现中的更改会导致扩展方法失效的风险

如果你确实为给定类型实现了扩展方法,请记住以下几点:

  • 如果扩展方法与该类型中定义的方法具有相同的签名,则扩展方法永远不会被调用。

  • 在命名空间级别将扩展方法置于范围中。 例如,如果你在一个名为 Extensions 的命名空间中具有多个包含扩展方法的静态类,则这些扩展方法将全部由 using Extensions; 指令置于范围中。

3.如果在不同的命名空间下,声明了同一个类型的同名的扩展方法,如果两个命名空间同时引入;

如果在相同的命名空间下,不同的静态类中定义了同一个类型的同名的扩展方法:

会抛出编译错误“以下方法或属性之间的调用具有二义性”

更多:

官方文档:

更多整理参考:

你可能感兴趣的文章
Spring Boot 监听 Redis Key 定时任务
查看>>
3DGIS产品层次结构
查看>>
SPI总线之NSS
查看>>
【Java】Java自动类型转换
查看>>
【Java】Java强制类型转换
查看>>
【Java】:Java制作九九乘法表
查看>>
【JQuery】:JQuery加载模式
查看>>
【C语言】求一千以内的素数 第一种方法
查看>>
【C语言】求Fibonacci数列的前20项(数组)
查看>>
【C语言】求N的阶乘
查看>>
【HTML】解决DIV消除浮动问题(clear)
查看>>
【MySQL】使用cmd操作MySQL数据库
查看>>
【TP】ThinkPHP3.1用户登陆功能实现-基础环境搭建
查看>>
【TP】ThinkPHP3.1用户登陆功能实现-核心代码
查看>>
【易语言】易语言制作-bt天堂ok资源采集器(网络爬虫)
查看>>
【HTML】设置页面字体
查看>>
【HTML】一个简单的登陆页面
查看>>
【HTML】设置全屏图片
查看>>
【HTML】段落开始空两格
查看>>
【C语言】求Fibonacci数列前40项(循环)
查看>>