通过接口使用静态类?

6
想象一下,您需要从整个应用程序中访问一些方法。静态类非常适合这种情况。
public static class MyStaticClass
{
    public static void MyMethod()
    {
        // Do Something here...
    }
}

但也许将来我会在另一个静态类中添加第二个静态方法的实现。

public static class MyStaticClass2
{
    public static void MyMethod()
    {
        // Do Something here...
    }
}

有没有一种方法可以在不更改从MyStaticClass.MeMethod();MyStaticClass2.MyMethod();的调用的情况下更改其他代码中使用的静态类?
我考虑过接口,但我不知道如何实现...如果我说得太疯狂了,请告诉我,我会简单地更改调用 :D

不,静态级别上没有接口。如果你很着急,你可以注释掉 MyStaticClass.MeMethod 的主体,并将调用转发到 MyStaticClass2 ;) - BartoszKP
你可以将MyMethod()放在另一个静态类中,这样你就可以从你当前的两个静态类中访问它。 - frenchie
2个回答

12

你想要一个工厂模式

这样你的工厂就是

public static class MyStaticClassFactory
{
   public static IMyNonStaticClassBase GetNonStaticClass()
   {
      return new MyNonStaticClass1();    
   }
  
}

实例

public class MyNonStaticClass1 : IMyNonStaticClassBase
{
    //
}

接口

public interface IMyNonStaticClassBase
{
   void MyMethod();
}

你也可以使用依赖注入容器(根据你的应用程序复杂性)。 - Carles Company
我对 DI 不是很了解,但我认为那对我来说太复杂了 :D - Kai Frische

1
我们使用 (Windsor Castle) https://www.nuget.org/packages/Castle.Windsor 作为工厂容器。
这是相同的原则。
您可以在单个接口中拥有多个实现,但在运行时只能将一个与接口关联到工厂中。
当您需要时,您只需在工厂级别上交换实现类即可。
如果您正在寻求优化代码,例如实现类,则这是一个非常有用的工具,因为您知道如果您在新的实现类中发现任何错误,您可以简单地将实现替换为预先存在的实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接