是否接受使用私有方法来避免构造函数中的虚拟成员?

Wah*_*aly 4 c# class-design

AFAIK,同意从构造函数访问虚拟成员是一种危险的做法.我们可以通过使用额外的步骤,方法来进行必要的初始化来克服这个问题吗?如下:

public class EntityAlpha {
    public virtual string Value { get; protected set; }

    public EntityAlpha(string value) {
        Value = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

被替换为

public class EntityAlpha {
    public virtual string Value { get; protected set; }

    public EntityAlpha(string value) {
         AssignValue(value);
    }

    private void AssignValue(string value) {
        Value = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用这种额外方法会产生什么后果?像在构造函数中使用虚拟成员还是最糟糕的那样仍然很危险?!如何测试这个假设是否有害?

Gre*_*reg 10

你实际上有同样的问题,只是现在代码更难以阅读.

关键是设计你的类,以便构造函数不会到达任何虚拟成员,甚至间接通过其他方法.

  • "现在你有两个问题" (3认同)