4 Stimmen

C# - Hinzufügen zu einem bestehenden (generierten) Konstruktor

Ich habe einen Konstruktor, der in generiertem Code ist. Ich möchte nicht den generierten Code ändern (weil es überschrieben werden würde, wenn ich neu generieren), aber ich muss einige Funktionen zum Konstruktor hinzufügen.

Hier ist ein Beispielcode:

// Generated file
public partial class MyGeneratedClass
{
   public MyGeneratedClass() 
   {
      Does some generated stuff
   }
}

Die einzige Lösung, die mir einfällt, ist diese:

// My hand made file
public partial class MyGeneratedClass
{
   public MyGeneratedClass(bool useOtherConstructor):this()
   {
      do my added functinallity
   }
}

Ich bin mir ziemlich sicher, dass das funktioniert, aber dann habe ich einen lahmen unbenutzten Parameter für meine Konstruktoren und muss sie alle ändern. Gibt es einen besseren Weg? Wenn nicht, ist das in Ordnung, aber ich dachte, ich würde fragen.

2voto

Jon Skeet Punkte 1325502

Wenn Sie C# 3 verwenden und den Generator ändern können, können Sie Teilmethoden :

// MyGeneratedClass.Generated.cs
public partial class MyGeneratedClass
{
   public MyGeneratedClass() 
   {
      // Does some generated stuff
      OnConstructorEnd();
   }

   partial void OnConstructorEnd();
}

// MyGeneratedClass.cs
public partial class MyGeneratedClass
{
   partial void OnConstructorEnd()
   {
      // Do stuff here
   }
}

1voto

ArtificialGold Punkte 825

Erlaubt Ihre Umgebung, dass Sie von MyGeneratedClass erben, anstatt es als partielle Klasse zu haben. Sie könnten dann den Konstruktor außer Kraft setzen?

1voto

Daniel Schaffer Punkte 54690

Wenn man davon ausgeht, dass man die Leistung des Generators nicht ändern kann, sind die Möglichkeiten leider etwas eingeschränkt und nicht ideal, wenn man bedenkt, wonach man sucht. Sie sind:

  • Erben von der generierten Klasse. Die untergeordnete Klasse ruft implizit den Konstrutor der übergeordneten Klasse auf.
  • Eine statische Methode als Initialisierer verwenden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X