【发布时间】:2023-03-22 23:22:01
【问题描述】:
有没有办法将抽象类型定义为抽象方法中的参数,并且当该方法在派生类中实现时,您将方法的类型更改为接受派生类型?
代码:
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
【问题讨论】:
标签: c# inheritance abstract-class