Надеюсь, что функция на самом деле не называется fn()
, но фактически названа так, как она делает, например CalculateTotal()
. Затем вы можете извлечь этот метод в класс, скажем: TotalCalculator
.
Теперь при запуске приложения, предпочтительно используя инъекцию зависимости, вы создаете один экземпляр класса, который делится между объектами, которые его требуют. Как так:
class TotalCalculator
{
public int Calculate()
{
return 42;
}
}
class NeedsCalculator1
{
TotalCalculator _calculator;
public NeedsCalculator1(TotalCalculator calculator)
{
_calculator = calculator;
}
public void Foo()
{
_calculator.Calculate();
}
}
class NeedsCalculatorToo
{
TotalCalculator _calculator;
public NeedsCalculatorToo(TotalCalculator calculator)
{
_calculator = calculator;
}
public void Bar()
{
_calculator.Calculate();
}
}
Затем инстанцировании калькулятор один раз, и передать его в конструктор других классов:
TotalCalculator calculator = new TotalCalculator();
NeedsCalculator1 dependency1 = new NeedsCalculator1(calculator);
NeedsCalculatorToo dependency2 = new NeedsCalculatorToo(calculator);
Теперь вы можете дополнительно абстрагировать зависимость калькулятор, создав базовый класс, содержащий конструктор и защищенное поле экземпляра TotalCalculator
, например.
Почему это увеличивает сложность, если 100 классов называют ваш метод? Например, если я использую метод 'String.Contains' в 100 классах, этот метод остается простым и читаемым. –
сделать его статическим методом? – Yellowfog
1. Создайте статический класс с помощью этого метода как статический метод. 2. Сделайте базовый класс, наследуйте весь класс из этого базового класса. Исследуйте этот метод в базовом классе – Anand