C# - добавление в существующий (сгенерированный) конструктор

У меня есть конструктор, который находится в сгенерированном коде. Я не хочу изменять сгенерированный код (потому что он будет перезаписан при регенерации), но мне нужно добавить некоторые функциональные возможности в конструктор.

Вот пример кода:

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

Единственное решение, которое я могу придумать, это:

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

Я вполне уверен, что это сработает, но тогда у меня будет неиспользуемый параметр для моих конструкторов, и я должен изменить их все. Есть ли способ лучше? Если нет, то это хорошо, но я подумал, что спросить.

3 ответа

Если вы используете C# 3 и можете изменить генератор, вы можете использовать частичные методы:

// 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
   }
}

Предполагая, что вы не можете изменить выходную мощность генератора, к сожалению, ваши параметры немного ограничены и не идеальны, учитывая то, что вы ищете. Они есть:

  • Наследовать от сгенерированного класса. Дочерний класс будет неявно вызывать конструктор родителя.
  • Используйте статический метод в качестве инициализатора

Позволит ли ваша среда наследовать от MyGeneratedClass, а не иметь его как частичный класс. Вы могли бы тогда переопределить конструктор?

Другие вопросы по тегам