Решение проблемы «Виртуальный вызов метода в конструкторе»
Я делаю программное обеспечение в 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
у метода есть еще одна перегрузка.