zoukankan      html  css  js  c++  java
  • 【设计原则和建议】 字段

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

    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 和其他第三方文章..

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

  • 相关阅读:
    C#中的委托(转)
    面试总结
    int, Int32.Parse和Convert.ToInt32的不同之处(分享)
    数据结构与算法基础学习(一)
    SVN服务器搭建和使用(二)
    WCF学习笔记(第一天,1.WCF概述)
    在此计算机中仅有部分visual studio2010产品已升级到SP1,只有全部升级,产品才能正常运行解决办法
    FormsAuthentication使用指南
    Why do I get the error "The target GatherAllFilesToPublish does not exist"?
    非彼拉且数列的实现
  • 原文地址:https://www.cnblogs.com/PurpleTide/p/2213711.html
Copyright © 2011-2022 走看看