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, а не иметь его как частичный класс. Вы могли бы тогда переопределить конструктор?