3

我有一个用 C# 编写的 .net 网站,它将提供其他开发人员可以使用的功能。所以我会做一些默认实现,开发人员可以覆盖一些方法

示例:我有一个类ShoppingCart和一个类Product,该类产品有一个方法getProductPrice ,购物车将调用getProductPrice计算购物车总价的方法

和在同一个项目中ShoppingCartProduct我会给开发人员.dll,这样他们就不能更改源代码,所以我们可以稍后更新程序集

所以他们需要制作另一个项目并扩展产品类并覆盖方法getProductPrice,以便他们可以在那里实现自己的逻辑问题是购物车不会调用扩展方法而是原来的

如果我们已经为开发人员创建了一个扩展项目,并且购物车将调用扩展方法,那么我们就有一个循环引用,因为扩展产品需要对产品的引用,而购物车需要对扩展产品的引用

部分类也不起作用,因为我们只能在同一个程序集中使用部分类

有人有建议吗?

提前致谢。

4

2 回答 2

2

您应该将所有Product方法标记为virtual

public virtual decimal GetProductPrice() { };

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

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

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

我猜只是语义,但 ShoppingCart 类的方法可能GetTotalPrice()不应该GetProductPrice()像我假设你得到购物车中产品的总成本那样。

于 2010-06-09T12:09:27.027 回答
0

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

此外,GetProductPrice听起来可能更好地实现为属性而不是方法。

于 2010-06-09T12:08:18.423 回答