当前位置: 首页 > 知识库问答 >
问题:

如何用相同的方法和继承编写2个类?

杨骏
2023-03-14
class Rule1 {
    int type = 1;
    string name = "Rule";
    public float Calc()
    {
        return 1 + 2 + type; // SAME
    }
}

class Rule2 {
    int type = 2;
    string name = "Rule2";
    public float Calc()
    {
        return 1 + 2 + type; // SAME
    }
}

class Rule3 {
    int type = 3;
    string name = "Rule3";
    public float Calc()
    {
        return 3 + 4 + type; // DIFFERENT
    }
}

我想在调用方法中写的是这样的:

class Calculator
{
    public void Do(List<IRules> ruleList)
    {
        foreach(var rule in ruleList)
        {
            rule.Calc();
        }
    }
}

那么,我的接口应该是什么样子,以及如何将calc方法抽象为默认实现但可重写?

共有1个答案

公良浩邈
2023-03-14

如果您有一个对大多数继承者(但不是所有继承者)都正确的实现,请将其标记为virtual,并在派生类中标记为override:

public class BaseCalculation
{
    public virtual float Calculate()
    {
        return 42;
    }
}

public class HalfCalculation : BaseCalculation
{
    public override float Calculate()
    {
        return 21;
    }
}

现在可以使用基类BaseCalCulation而不是接口。如果您坚持仍然使用接口,那么您仍然可以在接口中定义calculate()方法,并将其应用到基类:

public interface IRules
{
    float Calculate();
}

public class BaseCalculation : IRules
{
    // same as above

还有一个额外的好处,就是您可以将此接口应用到其他也计算某些内容的类,但不使用baseCalculation中的任何逻辑。

 类似资料:
  • 本文向大家介绍如何用js写一个继承?相关面试题,主要包含被问及如何用js写一个继承?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 原型链继承 核心: 将父类的实例作为子类的原型 特点: 非常纯粹的继承关系,实例是子类的实例,也是父类的实例 父类新增原型方法/原型属性,子类都能访问到 简单,易于实现 缺点: 要想为子类新增属性和方法,不能放到构造器中 无法实现多继承 来自原型对象的所有属性

  • 问题内容: 我有两个课,和。它们看起来像这样: 此错误指向Field的: 我希望首先调用Background init ()。要将“ a,b”传递给Fields的 init (),Field会分配a和b,然后将其中包含三个0的列表分配给field。然后让Background的 init ()继续,然后调用它自己的buildField()并用包含c的列表覆盖self.field。 似乎我还没有完全理

  • 我可以看到它不工作,因为我尝试了它。我只是无法解释为什么一定要这样。 第二个方法来自一个类,该类是实现第一个getValue()方法的类的子类。 为什么同名不足以覆盖该方法?我想到的唯一论点是,它将反对“是一个”关系,因为用A扩展的第二个方法的类必须具有与A相同的能力,如果你重写返回类型,你就打破了那个法律,对吧?

  • 问题内容: 我有一个关于Java中用于继承的方法的快速问题-在哪里我从按钮一直到父类中调用该方法。 该方法应该返回该对象的副本,但是如果我在继承继承中有三个类并调用三次,为什么继承继承中的最高类(仅在Object类下)获取该类的副本回来? 假设我们有三个类:A,B和C,其中A-> B-> C(继承=->) 然后,在类C中进行调用,在B中进行调用,在B中进行调用,在A中进行调用,这将调用“这次Obj

  • “编写一个名为clsWorker的超类和子类clsHourlyWorker和clssalariedworker。每个工人都有一个名字和一个工资率。编写计算每个员工周薪的方法computePay(int hours)。小时工按实际工作小时数获得小时工资,如果小时数最多为40小时。如果小时工工作超过40小时,则按时间半支付超出部分。受薪工人得到40小时的小时工资,无论实际小时数是多少。为继承编写一个测

  • 我偶然发现了这段代码。 在实际运行它之前,我试图猜测运行它的结果是什么。当我看到它们时,我真的很困惑&需要一些解释。 这是代码: 为什么会这样? ? 为什么还要出现?我根本没有实例化。 并且如果出现,为什么会出现在之后?