基本クラスと2つの継承クラスがあり、継承クラスごとに基本クラスのプロパティを異なる方法で使用する必要があります。それを実装するエレガントな方法は何でしょうか?
私は2つの異なる平均を維持している基本的なクラスを持っています。継承するクラスには同じメソッドgetAction()があり、それぞれが異なる計算を実行し、その計算に基づいてアクションを返します。両方の継承クラスの平均のインスタンスを1つ作成したいと思います。
基本クラスと2つの継承クラスがあり、継承クラスごとに基本クラスのプロパティを異なる方法で使用する必要があります。それを実装するエレガントな方法は何でしょうか?
私は2つの異なる平均を維持している基本的なクラスを持っています。継承するクラスには同じメソッドgetAction()があり、それぞれが異なる計算を実行し、その計算に基づいてアクションを返します。両方の継承クラスの平均のインスタンスを1つ作成したいと思います。
可能であれば、継承は避けてください。以下の解決策は、ニーズに完全に適合する戦略パターンの実装です。
class Params
{
public int First {get;set;}
public int Second {get;set;}
}
interface IAverageCounter
{
double Calculate(Params parameters);
}
class SomeAverage : IAverageCounter
{
public double Calculate(Params parameters)
{
return (parameters.First + parameters.Second) / 2;
}
}
class OtherAverage : IAverageCounter
{
public double Calculate(Params parameters)
{
return (parameters.Second - parameters.First) / 2
}
}
私はあなたが必要とするメソッドをオーバーライドします:
オーバーライド修飾子を使用して、メソッド、プロパティ、インデクサー、またはイベントを変更します。オーバーライドメソッドは、基本クラスから継承されたメンバーの新しい実装を提供します。オーバーライド宣言によってオーバーライドされるメソッドは、オーバーライドされたベースメソッドと呼ばれます。オーバーライドされる基本メソッドは、オーバーライドメソッドと同じシグネチャを持っている必要があります。
public class BaseClass
{
public double x;
// Constructor:
public Square(double x)
{
this.x = x;
}
public virtual double Area()
{
return x*x;
}
}
class InhertingClass1: BaseClass
{
// Constructor:
public Cube(double x): base(x)
{
}
// Calling the Area base method:
public override double Area()
{
return (6*(base.Area()));
}
}
class InhertingClass2: BaseClass
{
// Constructor:
public Cube(double x): base(x)
{
}
// Calling the Area base method:
public override double Area()
{
return (15*(base.Area()));
}
}