有两个文件A.cs
和B.cs
。在这两个类中都使用了一个方法fn()
。
方法fn()
用于两个类文件中。如果我在许多类文件中需要此方法(例如100个文件),这会增加代码复杂性。
我知道我们可以通过为定义了此方法的类创建一个对象来调用此方法。如何在每次访问此方法时不创建对象的情况下,在两个或多个类之间共享此函数?
答案 0 :(得分:7)
将该方法放在静态类中:
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();
答案 1 :(得分:2)
我希望函数不是真正调用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
实例字段的基类来进一步抽象计算器依赖项。
答案 2 :(得分:1)
假设此方法是自包含的,您可以创建一个static class并将此方法作为静态方法放入其中,然后由其他类调用。
如果is不是自包含的,你可以尝试在某个超类中声明它,让其他100个类扩展该类。