Kov*_*ovu 2 c# polymorphism inheritance encapsulation abstraction
我有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
}
}
Run Code Online (Sandbox Code Playgroud)
我要在调用方法中编写的内容如下:
class Calculator
{
public void Do(List<IRules> ruleList)
{
foreach(var rule in ruleList)
{
rule.Calc();
}
}
}
Run Code Online (Sandbox Code Playgroud)
那么我的界面应该如何看起来又如何将calc方法抽象为默认实现但可以覆盖呢?
如果您有这对大多数继承正确的,但实现不是全部,标记它virtual和override它的派生类:
public class BaseCalculation
{
public virtual float Calculate()
{
return 42;
}
}
public class HalfCalculation : BaseCalculation
{
public override float Calculate()
{
return 21;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用基类BaseCalculation,而不是接口。如果坚持使用接口,那么仍然可以Calculate()在接口中定义方法并将其应用于基类:
public interface IRules
{
float Calculate();
}
public class BaseCalculation : IRules
{
// same as above
Run Code Online (Sandbox Code Playgroud)
有了额外的好处,您可以将此接口应用于也计算某些内容的其他类,但其中没有任何逻辑BaseCalculation。
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |