【问题标题】:C# - Adding to an existing (generated) constructorC# - 添加到现有(生成的)构造函数
【发布时间】:2010-05-03 16:35:04
【问题描述】:

我有一个在生成代码中的构造函数。我不想更改生成的代码(因为重新生成时它会被覆盖),但我需要向构造函数添加一些功能。

下面是一些示例代码:

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

我很确定这会起作用,但是我的构造函数有一个蹩脚的未使用参数,我必须全部更改它们。有没有更好的办法?如果不是那很好,但我想我会问。

【问题讨论】:

    标签: c# constructor multiple-constructors


    【解决方案1】:

    如果您使用 C# 3 并且可以更改生成器,则可以使用partial methods

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

    【讨论】:

    • 唉,这是从 WSDL 生成的代码。我不知道如何更改该生成器。
    • 该死......如果你不能改变发电机,你不能做很多,不幸的是。您可以从生成的类派生一个新类,但我倾向于认为这有点滥用继承。当然,您可以添加其他构造函数 - 但如果您不需要 任何额外参数,那就有点麻烦了。添加一个调用构造函数然后调用其他东西的静态方法怎么样?
    【解决方案2】:

    您的环境是否允许您从 MyGeneratedClass 继承而不是将其作为部分类。然后你可以重写构造函数吗?

    【讨论】:

      【解决方案3】:

      假设您无法更改生成器输出,不幸的是,您的选择有点有限,考虑到您正在寻找的内容并不理想。它们是:

      • 从生成的类继承。子类将隐式调用父类的构造函数。
      • 使用静态方法作为初始化器

      【讨论】:

        猜你喜欢
        • 2023-01-12
        • 1970-01-01
        • 2012-03-08
        • 1970-01-01
        • 2016-12-16
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 2016-12-07
        相关资源
        最近更新 更多