【发布时间】:2013-06-18 22:22:10
【问题描述】:
我目前正在使用nopCommerce 源代码,并尽我所能避免编辑源代码,而是使用与源代码分开的部分类和插件,如果我们需要升级版本。
我想通过在同一个程序集中使用部分类来对下订单的代码进行一些更改:
原始源代码:
namespace Nop.Services.Orders {
public partial class OrderProcessingService : IOrderProcessingService {
public virtual PlaceOrderResult PlaceOrder(ProcessPaymentRequest processPaymentRequest)
{ //....
我的部分课程:
namespace Nop.Services.Orders {
public partial class OrderProcessingService : IOrderProcessingService {
public override PlaceOrderResult PlaceOrder(ProcessPaymentRequest processPaymentRequest) { //....
当我尝试编译此代码时出现错误:
Type 'Nop.Services.Orders.OrderProcessingService' 已经定义了一个 名为“PlaceOrder”的成员具有相同的参数类型
但是我使用的是override,原始类中的方法是virtual,有人能告诉我这里哪里出错了,我该如何覆盖这个方法?
【问题讨论】:
-
override和virtual用于继承,partial类不被视为继承。 -
还有其他方法可以覆盖该方法吗?我认为 nopCommerce 在任何地方都使用部分类的原因是可以在不更改源代码的情况下进行扩展
-
通常
partial类与自动生成的代码一起使用。为了override方法PlaceOrder,您将创建一个继承OrderProcessingService的类。 -
要在 Nop.Commerce 中“正确”执行此操作,您需要在插件中提供自己的 IOrderProcessingService 实现,您可能会从原始服务继承并覆盖所需的方法。当您想要更改前端的行为时,事情会变得更加复杂。您可以使用部分类和小部件插件扩展某些模型和控制器,但更改现有控制器的行为会迫使您更改原始代码。也许较新的版本有更好的方法来实现这一点。
标签: c# overriding virtual nopcommerce partial-classes