我有一个抽象类:
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
}
}
派生类:
public class Example : ExampleBase
{
public Example()
{
}
protected override void SetupData()
{
this.RelevantData = new Dictionary<int, Adress>
{ 1, new Adress { ... } },
{ 2, new Adress { ... } }
}
}
在基类中,ReSharper 告诉我
Virtual member call in constructor
我知道由于执行顺序调用该方法是危险的。但是我该如何解决这个问题?
上下文:我想在每个派生类中设置数据,然后在基类中处理这些数据。我想在基类中调用 SetupData()
方法,因为它在每个派生类中都是相同的。
派生类:
- 设置数据
基类:
- 处理数据
最佳答案
你不知道。你接受这是危险的事实,并且(试图)阻止它。这是一个设计缺陷!
例如,您可以通过将调用移至最高级别的类来防止这种情况发生,或者让每个类对其自己负责,从而消除方法调用的不安全部分。然后你不需要另一个类(基类)来负责它的派生类。
如果那是不可能的。使用评论或任何其他可用的方法非常清楚地表明开发人员在更新代码时应该考虑到这个问题。
关于c# - 解决构造函数中的虚拟成员调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29749034/