• 基础才是重中之重~隐藏应该隐藏的对象


    (本文不说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内部的知识,请把自己当成是一名微软的开发者,当成是微软的大牛,去身临其境的思考一些东西。

  • 相关阅读:
    SQL Server 限制IP登陆
    提高MSSQL数据库读取速度,降低CPU损耗
    Windows Azure 平台开发基础系列视频
    AutoFac使用方法总结:Part III
    Python学习笔记 01 快速入门
    黑苹果~~
    Python学习笔记 02 Python基础
    Python学习笔记 04 数字
    Python学习笔记 03 Python对象
    Gridview导出excel范例
  • 原文地址:https://www.cnblogs.com/lori/p/2886513.html
Copyright © 2020-2023  润新知