C#扩展方法

参数列表中this的这种用法是在.NET 3.0之后新增的一种特性---扩展方法。通过这个属性可以让程序员在现有的类型上添加扩展方法(无需创建新的派生类型、重新编译或者以其他方式修改原始类型)。

扩展方法是一种特殊的静态方法,虽然是静态方法,但是可以像使用类型上的实例方法一样去使用扩展方法(调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异)。

扩展方法的第一个参数指定该方法作用于哪个类型,并且该参数以this修饰符为前缀。

当你在其他命名空间使用时,需要用using将扩展方法所在命名空间显式导入到源代码中。

扩展方法必须在非范型静态类中定义。

扩展方法无法访问扩展类型中的私有变量。

可以使用扩展方法来扩展类或接口,但不能重写扩展方法。

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

通常建议你只在不得已的情况下才实现扩展方法,并谨慎地实现。只要有可能,必须扩展现有类型的情形都应该通过创建从现有类型派生新类型来达到这一目的。

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

在代码中,可以使用实例方法语法调用扩展方法。但是,编译器生成的中间语言(IL)会将代码转换为对静态方法的调用。因此,并未真正违反封装原则。实际上,扩展方法无法访问他们所扩展的类型中的私有变量。

又看到一篇不错的博客:

https://www.cnblogs.com/zhaopei/p/5678842.html

相关推荐
William_cl38 分钟前
[特殊字符]C# ASP.NET Core 前后端分离终极实战:JWT 身份认证与授权全流程(登录 + 鉴权 + 避坑)
c#·asp.net·状态模式
weixin_5375904511 小时前
《C程序设计语言》练习答案(练习1-13)
c语言·开发语言·c#
a177988771211 小时前
小程序上传图像失败
小程序·c#
JosieBook13 小时前
【C#】C# 所有关键字总结
开发语言·算法·c#
我是唐青枫13 小时前
C#.NET ConcurrentStack<T> 深入解析:无锁栈原理、LIFO 语义与使用边界
网络·c#·.net
黑棠会长14 小时前
ABP框架09.数据安全与合规:审计日志与实体变更追踪
分布式·安全·架构·c#·abp
JMchen12314 小时前
Android NDK开发从入门到实战:解锁应用性能的终极武器
android·开发语言·c++·python·c#·android studio·ndk开发
IT小哥哥呀15 小时前
基于windows的个人/团队的时间管理工具
windows·c#·wpf·时间管理
JosieBook17 小时前
【C#】C# 访问修饰符与类修饰符总结大全
前端·javascript·c#
星夜泊客17 小时前
C# : 引用类型都存在堆上吗
unity·c#