是否有可能创建一组相似的类
本文关键字:一组 相似 有可能 创建 是否 | 更新日期: 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#也允许通过派生类和继承来包含多态性,但对于公开的类型,我倾向于避免这种情况,而使用接口——即使是在使用继承来帮助共享实现的情况下。