2010-05-03 38 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

假設您無法更改生成器輸出,不幸的是,您的選項有點有限,並且考慮到您要查找的內容並不理想。它們是:

  • 繼承自生成的類。孩子班會隱式地稱之爲家長的顧問。
  • 使用靜態方法作爲初始化程序