扩展类和方法覆盖的问题

3
我有一个用C#编写的.NET网站,将制作其他开发人员可以使用的功能。因此,我会进行一些默认实现,开发人员可以覆盖其中的某些方法。
例如:我有一个类ShoppingCart和一个类Product。类Product拥有一个方法getProductPrice。购物车将调用getProductPrice方法来计算购物车的总价。
ShoppingCart和Product在同一个项目中,我将提供开发人员.dll文件,以便他们无法更改源代码,因此我们可以稍后更新程序集。
所以,他们需要创建另一个项目并扩展Product类并覆盖getProductPrice方法,以便他们可以实现自己的逻辑。问题是购物车不会调用扩展的方法而是原始的方法。
如果我们为开发人员创建了扩展项目,并且购物车将调用扩展方法,那么我们就会出现循环引用,因为扩展产品需要对产品进行引用,而购物车对扩展产品进行引用。
Partial classes也不起作用,因为我们只能在同一程序集内使用部分类。
有没有人有建议呢?
提前致谢。

术语是“override”,而不是“overwrite”。 - dthorpe
这些答案有帮到您吗?您还需要进一步的帮助吗? - djdd87
2个回答

2

你应该把所有的Product方法标记为虚拟的

public virtual decimal GetProductPrice() { };

那么以后接手的开发人员可以继承该产品并覆盖该方法:

public class OverriddenProduct : Product
{
   public override decimal GetProductPrice() { }
}

因为在我上面的示例中,OverridenProduct(被覆盖的产品)继承自Product,所以它仍然可以被添加到ShoppingCart类的Product集合中。

我猜这只是语义上的区别,但是ShoppingCart类的方法应该是GetTotalPrice()而不是GetProductPrice(),因为我假设您正在获取购物车中所有产品的总费用。


尝试实现它,更改一些逻辑和类,但我认为这是一个解决方案。 - Marco

0

将您的方法声明为虚方法。这样可以在继承类中重写它,以便任何对它的调用都将始终路由到覆盖实现。更多关于虚方法的信息

此外,GetProductPrice听起来更适合实现为属性而不是方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接