2016-04-22 52 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(); 

只要返回类型是一样的,你可以添加功能,委托(即调用委托一旦你可以调用多个功能)。 但是,您需要实施安全检查。