gpt4 book ai didi

c# - 如何编写具有相同方法和继承的 2 个类?

转载 作者:行者123 更新时间:2023-11-30 19:35:20 25 4
gpt4 key购买 nike

我有 X 类具有不同的信息和计算方法,应该共享但可以被覆盖,所以:

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 方法抽象为默认实现但可覆盖?

最佳答案

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

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

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

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

public interface IRules
{
float Calculate();
}

public class BaseCalculation : IRules
{
// same as above

还有一个额外的好处是,您可以将此接口(interface)应用到同样计算某些内容但不需要 BaseCalculation 中的任何逻辑的其他类。

关于c# - 如何编写具有相同方法和继承的 2 个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58288227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com