Хорошо, я уже решил это, но я хочу спросить / поделиться тем, что вы, ребята, думаете.
У меня есть базовый класс с двумя перегрузками для метода, например
public class Entity{
public virtual bool Save() {
//ReallySave()...
}
public virtual int Save(string someParam){
//also ReallySave()...
}
}
и у меня есть производный класс, в котором я хотел бы переопределить любой метод save (), который мне хотелось бы переопределить, например
class Person {
override int Save(string someParam){
console.log(someParam)
base.Save(someParam);
}
}
Теперь проблема в том, что где-то еще я хочу вызвать
person.Save();
или
person.Save("hello");
, но у меня нет способа узнать (и я не должен), какая перегрузка отменяется.Этот код падает из-за комбинации перезаписываемых перегруженных методов, поскольку вызов save () не переходит в переопределенный метод.
Поэтому я сделал несколько хитростей, чтобы на базовом уровне каждый базовый метод вызывалдругой, что-то вроде шаблона «цепочки ответственности».
Примером модифицированного базового класса будет
public class Entity{
private bool WithParamsMethodCalled = false;
private bool NoParamsMethodCalled = false;
public virtual bool Save() {
NoParamsMethodCalled = true;
if(!WithParamsMethodCalled ) { Save(""); }
//ReallySave()...
}
public virtual int Save(string someParam){
WithParamsMethodCalled = true;
if(!NoParamsMethodCalled ) { Save(); }
///no need to call ReallySave() here
}
}
Теперь вопрос: есть ли лучший способ сделать это?Код работает, но
a.его вонючий и
б.Если я хочу больше чем 2 перегрузки, это становится более уродливым
спасибо!