有两个文件A.cs
和B.cs
. 有一个fn()
在两个类中都使用的方法。
方法fn()
在两个类文件中都使用。如果我在许多类文件(比如 100 个文件)中需要这种方法,这会增加代码复杂性。
我知道我们可以通过为定义此方法的类创建一个对象来调用此方法。如何在两个或多个类之间共享此函数,而无需每次都创建一个对象来访问此方法?
将方法放在静态类中:
public static class Utils
{
public static string fn()
{
//code...
}
}
然后,您可以调用它,A.cs
而B.cs
无需每次都创建一个类的新实例:
A foo = new A();
foo.Property = Utils.fn();
或者,您可以创建一个BaseClass
所有类都继承自:
public class BaseClass
{
public BaseClass() { }
public virtual string fn()
{
return "hello world";
}
}
public class A : BaseClass
{
public A() { }
}
然后你会这样打电话fn()
:
A foo = new A();
string x = foo.fn();
我希望这个函数不是真的被调用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
实例字段的基类来进一步抽象计算器依赖项。
假设这个方法是自包含的,你可以创建一个静态类,并将这个方法作为一个静态方法放入其中,然后由其他类调用。
如果 is 不是自包含的,您可以尝试在某个超类中声明它,并让其他 100 个类扩展该类。