扩展类的问题和方法覆盖

发布于 2024-09-05 02:54:47 字数 574 浏览 11 评论 0原文

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

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

ShoppingCartProduct在同一个项目中,我将给开发人员.dll,因此他们无法更改源代码,因此我们可以稍后更新程序集

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

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

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

有人有建议吗?

提前致谢。

I have a .net website written in C# and will make functionalities that other developers can use.
So I will make some default implementation and a developer can overwrite some methods

Example:
i have a class ShoppingCart and a class Product the class product haves a method getProductPrice
the shoppingcart will call the method getProductPrice for calculating the total price of cart

The ShoppingCart and Product are in the same project and i will give the developers the .dll so they can't change the source code so we can update the assembly later

So they need to make a other project and extend the product class and overwrite the method getProductPrice so they can implement there own logic
The problem is that the shoppingcart will not call the extended method but the original

If we make already a extended project for the developers and the shoppingcart will call the extended method then we have a circular reference
because the extended product needs a reference to product and the shopping cart to the extended product

Partial classes also don't works because we only can use partials within the same assembly

Does anyone have a suggestion ?

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

_失温 2024-09-12 02:54:47

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

public virtual decimal GetProductPrice() { };

那么稍后接手的开发人员可以从产品继承并重写该方法:

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

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

我猜只是语义,但 ShoppingCart 类的方法可能应该是 GetTotalPrice() 而不是 GetProductPrice() 因为我假设您正在获取产品的总成本购物车。

You should mark all your Product methods as virtual:

public virtual decimal GetProductPrice() { };

Then the developers who will take over later can inherit from the product and override the method:

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

Because OverridenProduct (in my example above) inherits from Product, it can still be added into the Product collection within your ShoppingCart class.

Just symantics I guess, but the ShoppingCart class's method should probably be GetTotalPrice() not GetProductPrice() as I'm assuming you're getting the total cost of the products in the cart.

神爱温柔 2024-09-12 02:54:47

将您的方法声明为虚拟方法。这允许您在继承类中重写它,以便对它的任何调用都将始终路由到重写实现。 有关虚拟方法的详细信息

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

Declare your method as a virtual method. That allows you to override it in an inheriting class so that any calls to it will always be routed to the overriding implementation. More about virtual methods.

Also, GetProductPrice sounds like something that might be better to implement as a property instead of a method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文