【读书笔记】编写高质量代码改善C# 建议102-112 (⭐类、接口、单例)

102、区分接口和抽象类的应用场合

简单来说,抽象类解决的是"Is a"  接口解决的是"Can do"

103、区分组合和继承的应用场合

继承不仅仅指继承自某个类型,也可以指继承自某个接口,继承最大的优点就是多态

所以如果不使用多态,组合更能满足大部分应用场景。不要为了让代码看起来像“面向对象”,而滥用继承

104、用多态代替条件语句

类似于状态模式,用继承类来代替if 或者 switch,对拓展开放,对修改关闭

105、使用私有构造函数强化单例

//sealed类
public sealed class Singleton
{
    static readonly object lockObj = new object();
    private static Singleton instance;
    public static Singleton GetInstance
    {
        get
        {
            if(instance == null)
            {
                //防止多线程重复调用 加锁
                lock (lockObj)
                {
                    instance = new Singleton();
                }
            }
            return instance;
        }
    }
    //私有构造函数
    private Singleton() { }
}

106、为静态类添加静态构造函数

静态类初始化数据可以在静态构造函数里面初始化,为什么不能用实例构造函数呢?因为会报错

可以在静态构造函数里面捕捉数据初始化的异常

107、区分静态类和单例

单例是一个new 出来的一的实例对象,而静态类不可new

静态类不能被继承,也不能继承其他类,不能new,所以也不能当参数和返回值

108、将类型标识为sealed

如果一个类型确认没必要被继承,应该及时将其变为密封类

109、谨慎使用嵌套类

个人很少用到嵌套类

110、用类来代替enum

一个简单的类替代枚举的例子,注意构造方法要私有,防止外部实例化对象

class Week
{

    public static readonly Week Monday = new Week(0);
    public static readonly Week Tuesday = new Week(1);

    private int _infoType;

    private Week(int infoType)
    {
        _infoType = infoType;
    }
}

111、避免双向耦合

A类中有B的引用 ,同时B类中有A的引用

一般来说,类型之间不应该存在双向耦合,如果出现,应该考虑重构

112、将现实世界中的对象抽象为类,将可复用对象圈起来就是命名空间

面向对象初级

猜你喜欢

转载自blog.csdn.net/qq_33413868/article/details/81508595