在构造函数中解决虚拟成员调用

xer*_*him 3 .net c# oop resharper

我有一个抽象类:

public abstract class ExampleBase : IExampleBase
{
    protected ExampleBase() 
    {
        this.SetupData();
    }

    protected abstract Dictionary<int, Adress> RelevantData { get; set; }

    protected abstract void SetupData();

    public void ProcessData() 
    {
        // use RelevantData
    }
}
Run Code Online (Sandbox Code Playgroud)

派生类:

public class Example : ExampleBase
{
    public Example()
    {
    }

    protected override void SetupData()
    {
        this.RelevantData = new Dictionary<int, Adress>
        { 1, new Adress { ... } },
        { 2, new Adress { ... } }
    }
}
Run Code Online (Sandbox Code Playgroud)

在基类中,ReSharper告诉我

虚构件成员调用

我知道由于执行顺序而调用该方法很危险..但是如何解决这个问题呢?

上下文:我想在每个派生类中设置数据,然后在基类中处理.我想SetupData()在基类中调用该方法,因为它在每个派生类中都是相同的.

派生类:

  • 设置数据

基类:

  • 处理数据

Pat*_*man 14

你没有.你接受这是危险的事实,并且(尽量)防止这种情况发生.这是一个设计缺陷!

例如,可以通过将调用移动到最高级别类,或者使每个类对其自己负责来阻止这种情况,从而删除方法调用的不安全部分.然后,您不需要另一个类(基类)来负责其派生类.

如果那是不可能的.使用注释或任何其他可用的方法非常清楚,开发人员在更新代码时应考虑此问题.