我有一个用C#编写的.net网站,它将提供其他开发人员可以使用的功能。 所以我将做一些默认实现,开发人员可以覆盖一些方法
实施例:
我有一个班级ShoppingCart
和一个班级Product
,该班级产品有一个方法getProductPrice
购物车将调用方法getProductPrice
来计算购物车的总价
ShoppingCart
和Product
在同一项目中,我将为开发人员提供.dll,以便他们无法更改源代码,以便我们以后可以更新程序集
因此,他们需要创建另一个项目并扩展产品类并覆盖方法getProductPrice
,以便他们可以实现自己的逻辑
问题是购物车不会调用扩展方法而是调用原始
如果我们已经为开发人员创建了一个扩展项目,并且shoppingcart将调用扩展方法,那么我们有一个循环引用 因为扩展产品需要参考产品和购物车到扩展产品
部分类也不起作用,因为我们只能在同一个程序集中使用部分
有人有建议吗?
提前致谢。
答案 0 :(得分:2)
您应将所有Product
方法标记为virtual:
public virtual decimal GetProductPrice() { };
然后,稍后接管的开发人员可以继承该产品并覆盖该方法:
public class OverriddenProduct : Product
{
public override decimal GetProductPrice() { }
}
由于OverridenProduct
(在上面的示例中)继承自Product
,因此仍可将其添加到Product
类中的ShoppingCart
集合中。
我猜想只是语法,但ShoppingCart类的方法应该是GetTotalPrice()
而不是GetProductPrice()
,因为我假设您已经获得购物车中产品的总成本。
答案 1 :(得分:0)
将您的方法声明为虚方法。这允许您在继承类中覆盖它,以便对它的任何调用将始终路由到重写实现。 More about virtual methods
此外,GetProductPrice
听起来像是作为属性而不是方法实现的更好的东西。