• 【设计原则和建议】 字段


    希望和大家分享和讨论字段的设计思想和原则,共同进步。
     

    1.不要依赖字段的初始化顺序

        class FieldDemo
    {
    private int id = 1;//通过某中方法获取Id的值
    private ClassF f1 = new ClassF(1);//不要在这里依赖其他成员和执行顺序

    public FieldDemo()
    {
    //在构造函数里面设置依赖关系和执行顺序
    id = 1;
    f1 = new ClassF(id);
    }
    }

    public class ClassF
    {
    public ClassF(int id)
    {
    }
    }


    2.字段不应该是Public的

    • const可以是public的,不过我个人不推荐使用const


    3.声明字段的时候,显式赋值而不是依赖默认值

            private int age = 0;
    private string name = null;
    private DateTime date = DateTime.MinValue;
    public ClassF f = null;


    4.命名规则,选择名词,名词词组或是形容词+名词

        public class ClassF2
    {
    private int id = 0;//camel命名
    private static int DefaultId = 0; //实例字段pascal命名

    private int m_id = 0;//老式命名方法, 不推荐也不反对
    private static int s_DefaultId = 0; //老式命名方法,不推荐也不反对

    //如果是修改代码 要考虑现有代码的命名规则

    }


    5.如果可以,用以下方式调用字段

    • 方便阅读和理解
        public class ClassF
    {
    private int id = 0;
    private static int defaultId = 0;
    public ClassF(int id)
    {
    //只是测试代码
    Console.WriteLine(id);//参数和本地变量 非常不推荐参数和本地变量与字段重名。。。
    Console.WriteLine(this.id);//实例字段和成员加this
    Console.WriteLine(ClassF.defaultId);//静态字段和成员加类名
    }
    }



    6.如果可以,记得在Dispose中释放已经实现IDisposable接口的成员

        public class ClassF3 : IDisposable
    {
    public FileStream newFile = null;
    protected virtual void Dispose(bool disposing)
    {
    //true代表这个代码是用户调用的,回收托管和非托管资源
    //false代表这个代码是CLR调用的,只回收非托管资源
    if (disposing)
    {
    // 释放托管资源
    newFile.Close();
    }
    // 释放非托管资源
    }

    //不要提供virtual关键字
    //子类不要覆盖父类的实现
    public void Dispose()
    {
    Dispose(true);
    //由于我们使用Dispose回收了资源
    //就要通知GC不要调用终结器再次回收该资源
    GC.SuppressFinalize(this);
    }
    }


    7. static readonly 和 const

    • const明显性能更好
    • 如果该成员一定要public,或者是可能直接和间接被第三方程序集引用,需要明白const是在编译时就把内容拷贝到目标位置

    8.移除未使用的私有字段

    部分内容引用自MSDN,FxCop 和其他第三方文章..

    因为本人水平有限,如有遗漏或谬误,还请各位高手指正

  • 相关阅读:
    《架构整洁之道》阅读笔记
    设计模式——单例模式
    设计模式——工厂模式使用
    记一次同事安装我自定义一Python3 SDK在window10安装失败情况
    CentOS7常用的一些命令
    Java
    Java
    Java
    Java
    python
  • 原文地址:https://www.cnblogs.com/PurpleTide/p/2213711.html
Copyright © 2020-2023  润新知