【读书笔记】编写高质量代码改善C# 建议90-101 (⭐成员设计)

90、不要为抽象类提供公开的构造方法

抽象类本身是用来继承的,所以只让子类可见就行

91、可见字段应该重构为属性

92、谨慎将数组或集合作为属性

。。。

93、构造方法应初始化主要属性和字段

如果字段没有在构造方法在那个初始化,那么它就应该在构造器中设置初始值

94、区别对待override和new

有点绕。。测试一下就成了

如果子类new了一个方法掩盖了父类的同名方法,

Shape s1 = new Rectangle();

在这样调用的时候,因为前面的类型还是父类,所以调用的方法是父类的方法。

如果子类override了父类的虚方法,就算前面类型是父类,调用的还是子类重写后的方法

95、避免在构造方法中调用虚成员

class Shape 
{
    public Shape()
    {
        Init();
    }

    public virtual void Init()
    {     
    }
}

class Circle : Shape
{
    public string name;

    public Circle(string name):base()
    {
        this.name = name;
    }

    public override void Init()
    {
        Console.WriteLine(name);
    }
}


static void Main(string[] args)
{
    Circle circle = new Circle("haha");
}

由于调用Circle的构造函数前会先调用Shape的构造函数,但是当时name还没有被赋值,就会出现输出为空的情况

所以,建议不要在构造方法中调用虚成员

96、成员应优先考虑公开基类型或接口

??

97、优先考虑将基类型或接口作为参数传递

??

98、用params减少重复参数

void Method(string str, params int[] args){}

99、重写时不应使用子类参数

100、静态方法和实例方法没有区别

如果一个方法只跟类型有关系,那么它就应该被设计成静态方法

如果跟类型的实例对象有关系,那么它就应该被设计成实例方法

存储的位置也没区别

101、使用拓展方法,向现有类型“添加”方法

竟然还可以拓展接口,添加一个已经实现的方法

猜你喜欢

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