共有する必要があるが上書きされる可能性のある、さまざまな情報と計算メソッドを持つ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
インターフェイスの代わりに基本クラス、を使用できるようになりました。引き続きインターフェースを使用することを主張する場合でも、インターフェースでCalculate()
メソッドを定義し、それを基本クラスに適用できます。
public interface IRules
{
float Calculate();
}
public class BaseCalculation : IRules
{
// same as above
このインターフェイスを、何かを計算する他のクラスに適用できるという追加の利点がありますが、にあるロジックはありませんBaseCalculation
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加