扩展类的问题和使用方法覆盖

时间:2010-06-09 12:04:10

标签: c# .net partial-classes overwrite

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

实施例: 我有一个班级ShoppingCart和一个班级Product,该班级产品有一个方法getProductPrice 购物车将调用方法getProductPrice来计算购物车的总价

ShoppingCartProduct在同一项目中,我将为开发人员提供.dll,以便他们无法更改源代码,以便我们以后可以更新程序集

因此,他们需要创建另一个项目并扩展产品类并覆盖方法getProductPrice,以便他们可以实现自己的逻辑 问题是购物车不会调用扩展方法而是调用原始

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

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

有人有建议吗?

提前致谢。

2 个答案:

答案 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听起来像是作为属性而不是方法实现的更好的东西。

相关问题