Решение проблемы «Виртуальный вызов метода в конструкторе»

Я делаю программное обеспечение в C #. Я использую абстрактный класс,Instruction, который имеет эти биты кода:

protected Instruction(InstructionSet instructionSet, ExpressionElement newArgument,
    bool newDoesUseArgument, int newDefaultArgument, int newCostInBytes, bool newDoesUseRealInstruction) {

    //Some stuff

    if (DoesUseRealInstruction) {
        //The warning appears here.
        RealInstruction = GetRealInstruction(instructionSet, Argument);
    }
}

а также

public virtual Instruction GetRealInstruction(InstructionSet instructionSet, ExpressionElement argument) {
    throw new NotImplementedException("Real instruction not implemented. Instruction type: " + GetType());
}

Итак, Решарпер говорит мне, что на отмеченной линии явызов виртуального метода в конструкторе и что это плохо. Я понимаю, что такое порядок вызова конструкторов. Все переопределенияGetRealInstruction метод выглядит так:

public override Instruction GetRealInstruction(InstructionSet instructionSet, ExpressionElement argument) {
    return new GoInstruction(instructionSet, argument);
}

Так что они неt зависит от любых данных в классе; они просто возвращают то, что зависит от производного типа. (так что порядок конструктора нене влияет на них).

Итак, я должен игнорировать это? Я'скорее нет; так может кто-нибудь показать мне, как я могу избежать этого предупреждения?

Я не могу использовать делегатов аккуратно, потому чтоGetRealInstruction у метода есть еще одна перегрузка.

Ответы на вопрос(5)

Ваш ответ на вопрос