2012-10-24 42 views
5

是否可以在C#中的兩個文件之間拆分方法?我知道部分方法在那裏,但他們似乎無法做到這一點。在C#中跨兩個文件拆分方法

這裏是場景。我使用的是開源庫,需要在一個或多個文件中添加一些自定義項。例如,我想將兩個新字段添加到類Employee,然後在該類的InitializeFields()方法中初始化它們。由於開源項目不斷髮展,並且不時發佈新版本,因此我希望將我的定製與原始項目分開,以便輕鬆升級到更新版本的庫。

我已經使用partial class語法將所有需要的類拆分爲Orig.csCustom.cs,並在Custom.cs中添加了我的自定義字段。現在問題是我沒有辦法拆分InitializeFields()方法,所以我的自定義代碼進入Custom.cs文件。

請注意,我不能使用繼承來解決問題。開放源代碼庫將包含許多對Employee類的引用,我無法改變它們。

+7

一般來說,這不是*可擴展現有代碼的可維護方式。你有沒有考慮從Employee類繼承並添加你自己的字段?這樣你可以重寫'InitializeFields()',初始化你自己的字段,然後調用'base.InitializeFields()'。 –

+0

我很抱歉爲什麼你不能使用繼承?因爲有很多改變?找到並替換解決這個問題? –

+0

_將包含許多對Employee類的引用,並且我無法承擔改變它們的全部功能_--請看看__Refactor,Rename__ –

回答

5

當你這樣做時,你自己編譯庫,對吧?

我知道你不想子類Employee,因爲那麼所有的庫代碼new Employee()將無法​​正常工作。但是,如果您在Orig.cs中將Employee重命名爲EmployeeBase,並在Custom.cs中提供類Employee?那樣當庫代碼被編譯時,new Employee()會引用你的類,而不是庫中的一個。由於您在同一個項目中編譯庫和自定義,因此可以進行此替換。

+0

非常有創意的答案:) –

+0

謝謝大衛。巧妙地使用OOP。 – dotNET