C# 在两个类文件之间共享函数的最佳方法

C# 在两个类文件之间共享函数的最佳方法,c#,class,methods,C#,Class,Methods,有两个文件A.cs和B.cs。两个类中都使用了一个方法fn() 方法fn()在两个类文件中都使用。如果我在许多类文件(比如100个文件)中需要这种方法,这会增加代码的复杂性 我知道我们可以通过为定义此方法的类创建对象来调用此方法。如何在两个或多个类之间共享此函数,而不必每次创建对象来访问此方法?将此方法放入静态类: public static class Utils { public static string fn() { //code... }

有两个文件
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();
或者,您可以创建一个所有类都从中继承的
基类

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();

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


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

我希望该函数不是真正被称为
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个类调用您的方法,为什么会增加复杂性?例如,如果我在100个类中使用方法
String.Contains
,则该方法本身保持简单易读。使其成为静态方法?1。将此方法作为静态方法2创建一个静态类。生成基类,从该基类继承所有类。IMElement基类中的此方法创建一个包含所有常用方法的类。然后A.cs到Z.cs可以始终使用通用方法。cs@TimSchmelter如果100个类调用这个方法,那么我必须在不同的类文件中为同一个类创建100个对象。这里真的需要依赖项注入吗?这里真的需要
static
?我们不知道
fn()
做了什么,也不知道它或对它的调用是否需要被嘲笑。对于一个非常简单的问题来说,这似乎是矫枉过正。从小处做起总是最好的。只要我的2美分,看看。构造函数注入添加了一些样板代码,但允许轻松扩展和测试类。OP说他将在数百个其他类中需要这个类/方法(老实说,这本身听起来像个问题),所以我不会把它称为一个简单的问题。