Constructeurs De Classes Partielles

Existe-t-il un moyen d'avoir un constructeur de classe partielle appeler une autre méthode que mon ou peut ne pas être définie?

Fondamentalement, mon constructeur de classe partielle est défini:

public partial class Test
{
     public Test()
     {
          //do stuff
     }
}

Je voudrais pouvoir insérer du code supplémentaire à exécuter après l'appel du constructeur de classe.

En outre, Existe-t-il un moyen d'avoir plus d'un fichier pour injecter du code supplémentaire après l'appel du constructeur?

28
demandé sur AndreyAkinshin 2009-10-17 01:24:15

3 réponses

C # prend en charge la fonctionnalité des méthodes partielles . Ceux-ci permettent à une définition de classe partielle de déclarer une méthode qu'une autre partie de la classe partielle peut ensuite définir facultativement.

Les méthodes partielles ont quelques restrictions:

  • ils doivent être de type vide (pas de retour)
  • ils ne peuvent pas accepter les paramètres out, ils peuvent cependant accepter les paramètres ref
  • ils ne peuvent pas être virtuels ou externes et ne peuvent pas remplacer ou écraser une autre méthode (via " new" mot-clé)

Les méthodes partielles sont implicitement scellées et privées.

Il n'est cependant pas possible que deux parties différentes d'une classe partielle implémentent la même méthode partielle. Généralement, les méthodes partielles sont utilisées dans les classes partielles générées par code pour permettre à la partie non générée d'étendre ou de personnaliser le comportement de la partie générée (ou parfois vice versa). Si une méthode partielle est déclarée mais non implémentée dans une partie de classe, le compilateur éliminera automatiquement tous les appels à elle.

Voici un exemple de code:

 public partial class PartialTestClass
 {
     partial void DoSomething();

     public PartialTestClass() { DoSomething(); }
 }

 public partial class PartialTestClass
 {
     partial void DoSomething()  { /* code here */ }
 }
49
répondu LBushkin 2013-05-28 21:14:14

Eh bien, en C # 3.0, vous pouvez avoir ce qu'on appelle méthodes partielles - méthode qui peut être appelée, même si elles ne sont pas vraiment là.

S'ils ne sont définis dans aucun des fichiers de classe partiels, leur appel sera supprimé par le compilateur/éditeur de liens.Net.

Vous pouvez donc définir par exemple une classe client:

partial class Customer
{
  string name;

  public string Name
  {
    get
    {
      return name;
    }
    set
    {
      OnBeforeUpdateName();
      OnUpdateName();
      name = value;
      OnAfterUpdateName();
    }
  }

  partial void OnBeforeUpdateName();
  partial void OnAfterUpdateName();
  partial void OnUpdateName();
}

Ces méthodes partielles OnBeforeUpdateName () etc. sera appelé mais si aucun des fichiers de classe partiels n'implémente réellement quoi que ce soit pour eux, cela appel sera sans aucun effet. Linq-to-SQL utilise ce grand temps pour ce genre de méthodes de notification.

Voir ces messages de blog sur partielle méthodes:

Marc

7
répondu marc_s 2009-10-16 21:33:40

Recherche "méthodes partielles". Ils vont faire exactement ce que vous voulez.

Par exemple:

public partial class Test
{
    public Test()
    {
         //do stuff

         DoExtraStuff();
    }

    partial void DoExtraStuff();
}


public partial class Test // in some other file
{
     partial void DoExtraStuff()
     {
         // do more stuff
     }
}
6
répondu Neil 2010-01-04 19:01:07