基础才是重中之重~隐藏应该隐藏的对象
(本文不说IOC,不说设计模式,只说基础的internal关键字的实际意义)
题目非常有意思,“隐藏应该隐藏的对象”,事实上,我们在做开发时,会遇到一些问题,一个功能会涉及到一些类,一些方法,而向外开放的接口往往只有一个,即一个规范,多个实现,而这些实现,是通过一个类型来区别的,如:一个加密码方法EncryptString,它会有一个类型去标示你是用md5,des,还是其它方式去做加密,而对于实现的细节,调用者不需要关心,当然这还是面向对象的原则问题。
它的类型可能是个枚举:
/// <summary> /// 加密类型 /// </summary> public enum EncryptorType { /// <summary> /// DES加密 /// </summary> DES, /// <summary> /// 3DES加密 /// </summary> DES3, /// <summary> /// MD5加密 /// </summary> MD5, /// <summary> /// Base64加密 /// </summary> Base64, /// <summary> /// 加密方法 /// </summary> SHA256, }
OK,你可以能会对外公开的加密与解密的方法如下:
string EncryptString(string str); string EncryptString(string str, int code, EncryptorType type); string EncryptString(string str, EncryptorType type); string DecryptString(string str); string DecryptString(string str, EncryptorType type);
OK,在实现调用时,我希望只希望对外开这两个方法就可以了,但是我在调用时,将md5,desc,sha256这些方法功能类都暴露出来了,对于程序来说是个很丑陋的事,对于调用者来说也很头痛,看原来的代码:
由于md5,desc,sha256这些类的修饰符都是internal,所以调用时VS会显示成这样
这些的代码调用是非常不友好了,我们需要对代码进行重构,事实上方法很简单,因为md5,des等功能类只对自己的项目可见,所以把public改为interal就可以了
这其实就是“小微”对internal真实的希望,不是吗?
重构后的代码调用:
这才是我想要的,最后对大家说一句,如果想更好的了解.net内部的知识,请把自己当成是一名微软的开发者,当成是微软的大牛,去身临其境的思考一些东西。
合集:
设计模式
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2012-01-31 根据特殊实体业务,实现自定义排序