在我的抽象 ClassA 的构造中,我正在调用虚拟方法并收到警告。
https://msdn.microsoft.com/en-us/library/ms182331.aspx
https://www.ndepend.com/default-rules/Q_Constructor_should_not_call_a_virtual_method.html
public abstract class ClassA
{
private int m_number;
protected ClassA()
{
m_number = GetNumberIndirectly()
}
private int GetNumberIndirectly()
{
return GetNumber();
}
protected abstract int GetNumber();
}
如果我稍微更改 ClassA 中的代码并通过其他方法间接调用该虚拟方法,我没有收到任何警告。
这是一个好的设计吗?我不明白以下设计对前一个设计有什么好处。
tasks {
withType<ProcessResources> {
..
}
答案 0 :(得分:2)
这可能是一种替代方式:
public abstract class ClassA
{
private int m_number;
protected ClassA(int n)
{
m_number = n;
}
//protected abstract int GetNumber();
}
public class ClassB : ClassA
{
public ClassB() : base(10)
{
}
//protected override int GetNumber()
//{
// return 10;
//}
}