5

有两个文件A.csB.cs. 有一个fn()在两个类中都使用的方法。

方法fn()在两个类文件中都使用。如果我在许多类文件(比如 100 个文件)中需要这种方法,这会增加代码复杂性。

我知道我们可以通过为定义此方法的类创建一个对象来调用此方法。如何在两个或多个类之间共享此函数,而无需每次都创建一个对象来访问此方法?

4

3 回答 3

8

将方法放在静态类中:

public static class Utils
{
     public static string fn()
     {
         //code...
     }
}

然后,您可以调用它,A.csB.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();
于 2013-08-22T09:16:23.593 回答
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实例字段的基类来进一步抽象计算器依赖项。

于 2013-08-22T09:18:15.867 回答
1

假设这个方法是自包含的,你可以创建一个静态类,并将这个方法作为一个静态方法放入其中,然后由其他类调用。

如果 is 不是自包含的,您可以尝试在某个超类中声明它,并让其他 100 个类扩展该类。

于 2013-08-22T09:16:33.943 回答