1

Je crée une classe abstraite qui peut être héritée dans une classe partielle d'une classe LINQ to SQL. La classe LINQ to SQL contient un ensemble de méthodes partielles intégrées. Existe-t-il un moyen de mettre en œuvre une ou plusieurs des méthodes partielles dans la classe abstraite? Je sais que les méthodes partielles ne peuvent être contenues que dans des classes ou des structures partielles. Je suis sûr qu'il doit y avoir une autre façon de le faire.Méthode partielle à l'intérieur Classe abstraite (C#)

Voici plus en détail:

  • je peux avoir une table de base de données appelée Nouvelles. Si je crée un fichier dbml LINQ to SQL contenant cette table, le code généré automatiquement génère une classe partielle pour News.
  • Cette classe partielle contient plusieurs méthodes partielles.
  • J'ai une classe que je construis qui contient plusieurs méthodes que je voudrais utiliser dans toutes mes classes LINQ to SQL.
  • L'une de ces méthodes est une méthode partielle ajoutée à chaque classe LINQ to SQL. J'ai un corps commun à utiliser pour cette méthode. Plutôt que d'ajouter cette méthode à chaque classe partielle, je cherche un moyen de la créer une fois et de l'hériter avec mon héritage de classe de base.

L'espoir qui aide à expliquer plus.

Répondre

1

Les méthodes partielles ne sont pas utilisables par héritage. Vous pouvez ajouter des méthodes régulières à la classe de base abstraite, mais elles ne "coupleront" pas automatiquement les déclarations de méthode partielles. Donc non. Vous pouvez, bien sûr, avoir simplement l'appel de l'implémentation de la méthode partielle dans la classe de base.

Notez également que si le code commun se rapporte à des choses comme la vérification (qui/quand), vous pouvez aussi le faire en redéfinissant la méthode de SubmitChangesDataContext, et appelant GetChangeSet:

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

Enfin, notez que vous pouvez également spécifier une base-classe commune pour toutes vos entités dans le dbml (like so); vous n'avez pas à le faire à la main dans chaque classe partielle.

0

Je pense que je comprends ce que vous voulez faire, mais si ce n'est pas le cas, faites le moi savoir. Vous pouvez rendre votre classe de base abstraite partielle et tirer l'implémentation que vous voulez dans cette classe. Alternativement, vous pouvez prendre votre classe abstraite et encapsuler la fonctionnalité à laquelle vous voulez que vos classes enfants aient accès.

Questions connexes