Attualmente sto lavorando con il codice sorgente nopCommerce e sto facendo del mio meglio per evitare di modificare l'origine del tutto, ma utilizzando invece classi parziali e plugin che sono separati dal codice sorgente, dovremmo mai necessità di aggiornare le versioni.Sovrascrivere un metodo virtuale in una classe parziale
voglio fare alcune modifiche al codice che effettua un ordine, utilizzando una classe parziale nello stesso assembly:
Orignal Source Code:
namespace Nop.Services.Orders {
public partial class OrderProcessingService : IOrderProcessingService {
public virtual PlaceOrderResult PlaceOrder(ProcessPaymentRequest processPaymentRequest)
{ //....
mia classe parziale:
namespace Nop.Services.Orders {
public partial class OrderProcessingService : IOrderProcessingService {
public override PlaceOrderResult PlaceOrder(ProcessPaymentRequest processPaymentRequest) { //....
Quando provo a compilare questo codice ottengo un errore:
Type 'Nop.Services.Orders.OrderProcessingService' already defines a member called 'PlaceOrder' with the same parameter types
Ma sto usando override
e il metodo nella classe originale è virtual
, qualcuno potrebbe dirmi dove sto andando male qui, e come potrei scavalcare questo metodo?
'override' e' virtual' è per ereditarietà, le classi 'parziali' non sono considerate ereditarietà. – Matthew
c'è un altro modo per sovrascrivere il metodo? Penso che la ragione per cui nopCommerce usi le classi parziali ovunque sia così che le estensioni possano essere fatte senza alterare il codice sorgente – DevDave
In genere le classi 'partial' sono usate in congiunzione con il codice generato automaticamente. Per "sovrascrivere" il metodo 'PlaceOrder', dovresti creare una classe che eredita' OrderProcessingService'. – Matthew