抽象型を抽象メソッドのパラメーターとして定義する方法はありますか?そのメソッドが派生クラスに実装されている場合、派生型を受け入れるようにメソッドの型を変更しますか?
コード:
public abstract class ProductBase
{
}
public class SomeProduct
: ProductBase
{
}
public abstract class A
{
protected abstract void addProduct(ProductBase p);
}
// This works
public class B : A
{
protected override void addProduct(ProductBase p)
{
// Do some work
}
}
// This is what I'd like to do
public class C : A
{
// Compiler error here because I have accepted a SomeProduct and not a ProductBase
protected override void addProduct(SomeProduct p)
{
// Do some work on the specialisation - I can use the SomeProduct directly
}
}
私の頭の中では、それはある種の意味を持っています。派生クラスが実装する必要があるメソッドがあることを示す抽象クラスですが、同じ継承チェーンからのものである限り、パラメーターとして渡されるオブジェクトの型を変更できます...
私がやったことはAddProduct
、抽象クラスから抽象メソッドを削除し、代わりに派生クラスでそれを実装することですが、将来、他のクラスが独自の実装を作成する必要があるという契約はありませんAddProduct
. そして、それは正しくありません。
これが理にかなっていることを願っています。これが重複した質問である場合は申し訳ありませんが、検索しても何も見つかりませんでした。
ありがとう、
bgs264