构造函数中的虚拟成员调用c#

时间:2018-01-13 16:11:34

标签: c# constructor warnings virtual-method

在我的抽象 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> {
.. 
}

1 个答案:

答案 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;
    //}    
}