c# – 将具有相同行为的静态类分组

我有一组由静态类组成的逻辑,例如:
static class A {
    static int mutate(int i) { /**implementation*/ };
    static double prop(double a,double b) { /**implementation*/ }; 
}

static class B {
    static int mutate(int i) { /**implementation*/ };
    static double prop(double a,double b) { /**implementation*/ }; 
}

在这种情况下,A和B是通过一组函数(例如mutate)实现相同行为的静态类.我想使用类似于这种模式的接口,但由于静态类无法实现接口,我不知道该怎么做.干净地实施这种行为的最佳方法是什么?

编辑:

这是我目前正在做的一个例子.这些类没有状态,所以通常我会把它们变成静态的.

Interface IMutator {
    int mutate(int i);
}

class A : IMutator {
    int mutate(int i) { /**implementation*/ };
}

class B : IMutator {
    int mutate(int i) { /**implementation*/ };
}

class C {
    public List<IMutator> Mutators;
    public C(List<IMutator> mutators) { 
        Mutators = mutators;
    }
}

//Somewhere else...
//The new keyword for A and B is what really bothers me in this case.
var Cinstance = new C(new List<IMutator>() {new A(),new B() /**...*/});

解决方法

无状态类不必是静态的.
此外,当您想要编写单元测试时,或者当您想要提取一些通用接口时(如您的情况),静态依赖项不是一个好的选择.

拥有非静态类是可以的,只包含逻辑.例如,人们使用无状态控制器构建ASP .NET应用程序.

所以,抛弃静态并提取一个接口.

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString(&quot;x2&quot;));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable&lt;Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include &quot;WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...