Как не прописывать одни и те же методы во всех классах, которые отличаются одной строкой?
Имеются 2 метода StatsUpdate() и ActionAdd(). Они используются в 3х классах и дальше будут использоваться примерно в 8 классах. Логика у них одинковая во всех классах. За исключение 1 строки
MyClass.Instanse.Actions = actions;
Различия только в том, в какой класс отдаются данные.
Хочется прописать его один раз, а не в каждом классе. Как сделать так, чтобы метод понимал куда отдавать данные? Есть вариант передавать в метод имя класса из которого он вызывается, и после через if else выбирать куда посылать данные. Но я думаю есть более изощренный способ это сделать
Ответы (1 шт):
Отнаследуйтесь от базового класса.
Допустим у вас есть два класса:
public class Foo
{
public void StatsUpdate()
{
// общие действия во всех классах
Console.WriteLine("Welcome");
// различающаяся одна строчка
Console.WriteLine("Foo");
}
}
public class Bar
{
public void StatsUpdate()
{
// общие действия во всех классах
Console.WriteLine("Welcome");
// различающаяся одна строчка
Console.WriteLine("Bar");
}
}
Сделайте базовый:
public class FooBarBase
{
protected void CommonLogic()
{
// общие действия во всех классах
Console.WriteLine("Welcome");
}
}
и наследников:
public class Foo : FooBarBase
{
public void StatsUpdate()
{
CommonLogic();
// различающаяся одна строчка
Console.WriteLine("Foo");
}
}
public class Bar : FooBarBase
{
public void StatsUpdate()
{
CommonLogic();
// различающаяся одна строчка
Console.WriteLine("Bar");
}
}
Эффект - тот же самый:
var foo = new Foo();
var bar = new Bar();
foo.StatsUpdate();
bar.StatsUpdate();
Ну а дальше по вкусу... можно передавать переменные в базовый метод, чтобы включать или выключать в нём логику, использовать проверки на тип наследника, например:
protected void CommonLogic()
{
if(this.GetType() == typeof(Bar))
Console.WriteLine("Foo logic");
// общие действия во всех классах
Console.WriteLine("Welcome");
}
ну и так далее.
А вообще, сдаётся мне, что если у вас 8 классов, то там скорее всего тоже копипасты много и всё отличается незначительно, можно обобщить.