是否有可能创建一组相似的类

本文关键字:一组 相似 有可能 创建 是否 | 更新日期: 2023-09-27 18:09:54

我想知道我是否可以使一组类都具有相同的功能,但算法在每个是不同的。假设我们有。乘。cs,加。cs,减。cs。每个都有这样的结构:

public Class(int BaseInt)
{
    ...
}
public MakeNumber(int Oint)
{
    ...
}

因此,multiple .cs MakeNumber()将不同于Add.cs MakeNumber()方法,但两者都将返回int,因此可以在类似的上下文中使用。有没有办法把这些类配对,我们称它们为群算子。我可以在这个组下声明一个变量吗?

Operators MyOperator = new Operators();

但是之后我可以说

MyOperator = Multiply;

是否有可能创建一组相似的类

这类东西是用于接口的常见设计模式。然而,使用你的例子会有点奇怪。

public interface IMakesNumber
{
public int MakeNumber(int number);
}

那么你所有的类都可以实现它…

public MyMultiplication : IMakesNumber
{
public int MakeNumber(int number)
{
//bla
}
}

那么你可以这样做

IMakesNumber myOperator = //Generally you'd use a Factory Design Pattern
int something = myOperator.MakeNumber(no);

根据myOperator的实际类型-无论你实现什么都会发生

我会考虑一个接口1(注意这里的不是"制作数字"),但这可以使用相同的想法来完成;这似乎是更合乎逻辑的目标)

interface IBinaryOp { int Apply(int a, int b); }

则可以创建不同的实现

class Add : IBinaryOp {
    public int Apply(int a, int b) { return a + b; }
}
class Multiply : IBinaryOp {
    public int Apply(int a, int b) { return a * b; }
}

,然后生成的实例可以多态地使用

IBinaryOp op = (new Random().NextDouble() < .5) ? new Add() : new Multiply();
int r = op.Apply(2, 4);
// r is 6 or 8, depending upon which instance was created

1虽然c#也允许通过派生类和继承来包含多态性,但对于公开的类型,我倾向于避免这种情况,而使用接口——即使是在使用继承来帮助共享实现的情况下。