首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用相同行为对静态类进行分组

使用相同行为对静态类进行分组
EN

Stack Overflow用户
提问于 2016-06-29 04:49:09
回答 2查看 290关注 0票数 6

我有一组由静态类组成的逻辑组,如:

代码语言:javascript
复制
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是通过一组函数(例如变体)实现相同行为的静态类。我想为这个模式使用类似于接口的东西,但是由于静态类不能实现接口,我不知道该做什么。清洁地实现这类行为的最佳方法是什么?

编辑:

以下是我目前所做工作的一个例子。这些类没有状态,所以通常我会使它们是静态的。

代码语言:javascript
复制
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() /**...*/});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-29 05:06:35

无状态类不必是静态的。此外,当您想要编写单元测试时,或者当您想要提取一些公共接口时,静态依赖关系并不是一个好的选择(在您的情况下)。

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

因此,只需丢弃static并提取一个接口即可。

票数 5
EN

Stack Overflow用户

发布于 2016-06-29 05:25:50

除了@Dennis (我已经做了+1'ed,这确实是可行的方法)之外,其他可能有效的方法是拥有一组函数(Func<>)和/或操作(Action<>),并使用反射来解析它们。该代码将不是特别优雅或表现,但它的工作。

我做了一个简单的例子论圆珠笔

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38090624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档