2012-08-25 216 views
0

我正在C#中構建一個程序,並且使用了很多dll。但是,我相信我只使用每個dll的少量函數,所以想知道是否可以以某種方式訪問​​dll並僅將使用的函數提取到單獨的dll中。或者換句話說,我有2個d和A和B. A有函數a,b和c,B有函數1,2和3.如果我只使用a和2,有沒有什麼辦法(或者它甚至是合法的??)以某種方式使第三個DLL C只有一個和2?查找dll依賴關係

目的是讓我不必引用2(其實更像是20),而僅需要1

這是可能的/法律????我知道微軟有一個工具,可以將dll合併成一個工具,但我不知道如何編輯它們或任何東西......任何人都可以解釋一下嗎?

+0

我不知道它是否合法(如果這些程序集是由Microsoft製作的,您應仔細閱讀EULA,或者如果它們是由第三方提供的,則應該使用用戶許可證)。 無論如何,你可以做些什麼來限制引用的數量,就是創建一個包含所有必要引用的庫,例如名爲「External/Helper Methods」,並將其用作唯一的存儲庫。通過這種方式,您可以獲得單個引用,而不是20個。 NotaBene:此解決方案可能不適用,例如,如果您使用的方法具有其他類在同一個程序集中定義的其他類的參數。 –

+0

據瞭解,沒有這樣的事情。如果這些DLL是你的 - 我相信它們不是 - 你可以合併這些源代碼。但是你不能更改別人擁有的代碼,並用這些代碼「烘烤你自己的蛋糕」......我希望這永遠不會成爲可能,否則將是一團糟...... – devundef

回答

0

@ Mattb2291:我會建議一種不同的方法。取一個具有函數a和2的C類.A類和B類應該從C繼承.C類提供方法a和2的基本實現。

但是對於你需要牢記的某些事情:

首先,從OOP的方面來看,A類和B類與同一問題域有關嗎? 第二,如果方法和2訪問各自的類中的任何類成員,你必須將它們移動到C類代碼,您可能看起來像:

class C{ 
    void a(){ 
    } 

    void 2(){ 
    } 
} 

class A:C{ 
} 

class B:C{ 
} 

這個答案是從有機磷農藥的角度。您必須在項目實施之前對其進行驗證。