我需要为一个类的非静态方法创建一个委托(delegate)。复杂的是,在创建时我没有类的实例,只有它的类定义。在通话时,我手头有实例。因此我需要一种方法:
- 构建一个“不完整”的委托(delegate)给成员方法,缺少实例。
- 调用 1 的委托(delegate),明确传递该类的一个实例。
这两个都可以吗?如何? 注意:我愿意为第一个付出高昂的性能代价,但理想情况下,第二个不应比委托(delegate)调用贵很多。
最佳答案
您可以使用 Delegate.CreateDelegate为给定 MethodInfo 的特定目标实例动态构造委托(delegate)。您可以使用 Type.GetMethod 查找 MethodInfo。 (反射)并将其缓存以备后用创建委托(delegate)。
例如,这将获取“GetHashCode”方法并将其绑定(bind)到“this”实例:
var method = typeof(Object).GetMethod("GetHashCode");
var del = (Func<int>)Delegate.CreateDelegate(typeof(Func<int>), this, method);
如果方法有多个重载,则有更多微妙之处,但如有必要,您可以使用其他 GetMethod 参数来消除歧义。
关于c# - 从非静态方法构建静态委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4083028/