Решение проблемы «Виртуальный вызов метода в конструкторе»
Я делаю программное обеспечение в 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);
}
Таким образом, они не зависят от каких-либо данных в классе; они просто возвращают то, что зависит от производного типа. (поэтому порядок конструктора не влияет на них).
Итак, я должен игнорировать это? Я бы не; так может кто-нибудь показать мне, как я могу избежать этого предупреждения?
Я не могу использовать делегатов аккуратно, потому чтоGetRealInstruction
У метода есть еще одна перегрузка.