让你觉得破坏了封装性的扩展方法
扩展方法
源于对扩展方法的了解是来自List<T>的Where、Order、GroupBy等方法的使用,智能感知提示这些方法都是扩展方法,于是MSDN上查阅后总结如下自定义扩展方法(将字符串转换为Int,代码拷贝)
namespace MyCommon
{
public static class EString
{
public static int ToInt(this string t)
{
int id;
int.TryParse(t, out id);//这里当转换失败时返回的id为0
return id;
}
}
}
微软规定,扩展方法:1、必须是静态类和静态方法(而且必须是public)
2、参数必须以this作为前缀
其实咋一看,扩展方法明显违法了封装性的原则,把方法设为public,让外界直接调用,这是很违法封装原则的,但是这里没有办法,如果改为private,外界实例无法访问,但是微软告诉我们,虽然是使用实例方法的语法来调用扩展方法,但是编译器生成的IL中间语言的时候会把代码转换成对静态方法的调用,理论上说并未真正违法封装性的原则,但是这种解释有点牵强。
我突然发现,该静态类的名称 EString似乎毫无用处,似乎可以随意改动,的确是这样,这里要的只是命名空间和方法名,而方法的第一个参数决定了该扩展方法是用于对何种类型的扩展,例如上面的例子this string t,第一个参数的类型是string,则是对string做的扩展方法
另外扩展方法的优先级总是比实例本身的方法的优先级低,即如果A类本身有fun1()方法,则另外扩展一个同名的fun1方法,则扩展的fun1,永远不会执行,因为在编译的时候编译器永远不会绑定到该扩展方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?