Domanda

Sto creando una classe astratta che può essere ereditata in una classe parziale di una classe LINQ to SQL.La classe LINQ to SQL contiene una serie di metodi parziali incorporati.Esiste un modo per implementare uno o più metodi parziali nella classe astratta?So che i metodi parziali possono essere contenuti solo all'interno di classi o strutture parziali.Sono sicuro che ci deve essere un altro modo per farlo.

Ecco maggiori dettagli:

  • Potrei avere una tabella del database chiamata News.Se creo un file dbml LINQ to SQL contenente questa tabella, il codice generato automaticamente genera una classe parziale per News.
  • Questa classe parziale contiene diversi metodi parziali.
  • Sto creando una classe che contiene diversi metodi che vorrei utilizzare in tutte le mie classi LINQ to SQL.
  • Uno di questi metodi è un metodo parziale aggiunto a ogni classe LINQ to SQL.Ho un corpo comune da utilizzare per questo metodo.Piuttosto che aggiungere questo metodo a ciascuna classe parziale, sto cercando un modo per crearlo una volta ed ereditarlo con l'eredità della mia classe base.

Spero che questo aiuti a spiegare di più.

È stato utile?

Soluzione

I metodi parziali non sono utilizzabili tramite ereditarietà.Potresti aggiungere metodi regolari alla classe base astratta, ma non si "accoppieranno" automaticamente con le dichiarazioni parziali dei metodi.COSÌ:NO.Ovviamente puoi semplicemente richiamare l'implementazione parziale del metodo nella classe base.

Tieni inoltre presente che se il codice comune si riferisce a cose come l'audit (chi/quando), puoi farlo anche sovrascrivendo il DataContext'S SubmitChanges metodo e chiamata GetChangeSet:

    public override void SubmitChanges(ConflictMode failureMode)
    {
        ChangeSet delta = GetChangeSet();
        //... use delta.Updates, delta.Inserts and delta.Deletes
        base.SubmitChanges(failureMode);
    }

Infine, tieni presente che puoi anche specificare una classe base comune per tutte le tue entità nel dbml (così);non è necessario farlo a mano in ogni lezione parziale.

Altri suggerimenti

Penso di aver capito cosa vuoi fare, ma in caso contrario fammi sapere.Puoi rendere parziale la tua classe base astratta e inserire l'implementazione che desideri in quella classe.In alternativa, potresti prendere la tua classe astratta e incapsulare la funzionalità a cui desideri che le tue classi figlie abbiano accesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top