2016-04-22 53 views
0

所以這可能是一件非常簡單的事情,但我想知道委託的概念是否合適。如何使用代理在c#中創建鉤子

我有以下的方法說在我的主

PrintName(); 
GetId() 

如果我想添加「GetPhone()」如果你將注入它在我的主,我使用委託呢?

我的想法是編譯器會調用main,並且只能識別那裏的方法,並且不知道GetPhone()是否存在(因爲我只是將它添加到文件夾中的某處),這種架構的推理是我希望能夠創建一個即插即用的概念。

謝謝。

+0

如果你想操作一個編譯好的二進制文件,你不會四處尋找MSIL代碼並修改它。從ILSpy和一些IL教程開始,然後你會看到如何自己向函數注入調用。 –

+1

可以動態加載新程序集('Assembly.LoadFile')。通常,如果您想要即插即用,您可以編寫一些插件代碼所針對的接口。然後,在您的應用程序中,您可以添加查看特定目錄的代碼,並加載所有程序集。然後你抓住界面上定義的類型,並像往常一樣執行它們。 – Rob

+0

@MaximilianGerhardt它根本沒有看起來像他們想修改二進制文件,但創建插件功能 – Rob

回答

1

當然。而不是直接調用功能,你可以使用一個委託,然後調用委託,像這樣:

delegate void GetThings(); 
public GetThings myDelegate; 

然後,您可以分配或從函數添加到委託「即插即用」的對象。

myDelegate = PrintName(); 
myDelegate += GetId(); 
myDelegate = GetPhone(); 

只要返回類型是一樣的,你可以添加功能,委託(即調用委託一旦你可以調用多個功能)。 但是,您需要實施安全檢查。