C # - Добавление к существующему (сгенерированному) конструктору - PullRequest
4 голосов
/ 03 мая 2010

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

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

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

2 голосов
/ 03 мая 2010

Если вы используете 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
   }
}
1 голос
/ 03 мая 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...