【问题标题】:Use static class by interface?通过接口使用静态类?
【发布时间】:2013-10-09 03:14:51
【问题描述】:

假设您需要从整个应用程序中访问一些方法。静态类非常适合。

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;)
  • 您可以将 MyMethod() 放在另一个静态类中,这样您就可以从当前的两个静态类中访问它。

标签: c# class interface static


【解决方案1】:

你想要一个factory pattern

所以你的工厂是

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

实例

public class MyNonStaticClass1 : IMyNonStaticClassBase
{
    //
}

界面

public interface IMyNonStaticClassBase
{
   void MyMethod();
}

【讨论】:

  • 您也可以使用 DI 容器(取决于您的应用程序的复杂性)。
  • 我对 DI 了解不多,但我认为这对我来说太复杂了 :D
【解决方案2】:

我们使用(温莎城堡)https://www.nuget.org/packages/Castle.Windsor 作为工厂容器。

这是同一个校长。

每个单独的接口可以有多个实现,但只有一个在运行时与工厂中的接口相关联。

您需要做的就是在需要时在工厂级别交换实现类。

如果您希望优化代码(即实现类),这是一个非常有用的工具,因为您知道如果在新的实现类中发现任何错误,您可以简单地将实现替换为预先存在的。

【讨论】:

    猜你喜欢
    • 2013-08-16
    • 2016-11-15
    • 2011-01-27
    • 2017-12-05
    • 1970-01-01
    • 2016-01-08
    • 2016-08-10
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多