2010-05-03 43 views
4

我有一个构造函数在生成的代码中。我不想更改生成的代码(导致它在重新生成时会被覆盖),但我需要向构造函数添加一些功能。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 
    } 
} 

我相当肯定这会工作,但后来我有一个跛脚未使用param给我的构造函数,我必须去改变它们。有没有更好的办法?如果不是很好,但我想我会问。

回答

2

如果您使用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 
    } 
} 
+0

唉,这是从WSDL生成的代码。我不知道如何改变发生器。 – Vaccano 2010-05-03 16:40:33

+1

该死......如果你不能改变发电机,不幸的是你不能做很多事情。你可以从生成的类中派生出一个新的类,但我倾向于认为这是对继承的一种滥用。你当然可以添加其他构造函数 - 但是如果你不需要*任何额外的参数,这有点痛苦。如何添加一个调用构造函数然后调用其他东西的静态方法? – 2010-05-03 17:07:13

1

请问你的环境,让你从MyGeneratedClass继承,而不是把它作为一个分部类。你可以重写构造函数?

1

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

  • 继承自生成的类。孩子班会隐式地称之为家长的顾问。
  • 使用静态方法作为初始化程序