Я делаю программное обеспечение в С#. Я использую абстрактный класс 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());
}
Итак, Resharper сообщает мне, что на отмеченной строке я вызываю виртуальный метод в конструкторе и что это плохо. Я понимаю вещь о порядке, в котором вызываются конструкторы. Все переопределения метода GetRealInstruction
выглядят следующим образом:
public override Instruction GetRealInstruction(InstructionSet instructionSet, ExpressionElement argument) {
return new GoInstruction(instructionSet, argument);
}
Таким образом, они не зависят от каких-либо данных в классе; они просто возвращают то, что зависит от производного типа. (поэтому порядок конструктора не влияет на них).
Итак, следует ли игнорировать его? Я бы не; так может ли кто-нибудь показать мне, как я мог избежать этого предупреждения?
Я не могу использовать делегатов аккуратно, потому что метод GetRealInstruction
имеет еще одну перегрузку.