いくつかの情報で見つけたこのコードが正しいかどうか疑問に思っています。私が奇妙だと思うのは、両方の例で直径が2回使用されていることです.これは本当に正しいですか?
public Ellipse(double diameter): base(diameter, diameter)
いくつかの情報で見つけたこのコードが正しいかどうか疑問に思っています。私が奇妙だと思うのは、両方の例で直径が2回使用されていることです.これは本当に正しいですか?
public Ellipse(double diameter): base(diameter, diameter)
構文は正しいです。クラスは次のようになります。
public class Base
{
public Base(double d1, double d2)
{
}
}
public Eclipse : Base
{
public Ellipse(double diameter)
: base(diameter, diameter)
{
}
}
これはクラスのEllipse
コンストラクターで、2 つのパラメーターを持つ基本クラスのコンストラクターを呼び出します。
次のようになります。
class Shape
{
public Shape(double diameter1, double diameter2)
{
}
}
class Ellipse : Shape
{
public Ellipse(double diameter) : base(diameter, diameter)
{
}
}
new Ellipse(10);
10 が Ellipse コンストラクターに渡されると、Shape
クラス コンストラクターが呼び出され、これらの両方のパラメーターの引数として10が渡されます。
これは、基本クラスのコンストラクターがパラメーターをどう処理するかによって異なりますが、構文的には正しいです。
投稿したコードは、デフォルトの基本クラス コンストラクター (存在する場合) の代わりに、指定された引数に一致する基本クラス コンストラクターを呼び出します。
これはコンストラクターの連鎖です。つまり、子コンストラクターの前に基本コンストラクターを呼び出します。
基本クラスに次のようなコンストラクタがある場合
public Base(double, double)
それなら全然大丈夫です。