是否有某种方法可以将抽象类型定义为抽象方法中的参数,并且当在派生类中实现该方法时,可以更改该方法的类型以接受派生类型?
Code:
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
。但事实并非如此感觉不错.
我希望这是有道理的。抱歉,如果这是一个重复的问题,但我无法通过搜索找到任何内容。
Thanks,
bgs264
你可以让你的A
类为泛型并在您的中使用泛型参数addProduct
method:
public abstract class A<TProduct> where TProduct : ProductBase
{
protected abstract void addProduct(TProduct p);
}
public class B : A<ProductBase>
{
protected override void addProduct(ProductBase p)
{
}
}
public class C : A<SomeProduct>
{
protected override void addProduct(SomeProduct p)
{
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)