C# 传递方法的签名并在同一类型的另一个对象上调用它

C# 传递方法的签名并在同一类型的另一个对象上调用它,c#,methods,delegates,C#,Methods,Delegates,我想传递一个方法并存储它。假设该方法接受一个int并返回void。我会把它包装成动作 现在,有没有一种方法可以调用该方法,而不是调用它来自的对象,而是调用同一类的不同实例 很难比这更具体,但请询问是否有任何地方令人困惑,我会再试一次。您可以使用which-takes参数类型。这使您可以使用指定的参数类型获取确切的方法。您可以使用,它接受参数类型。这允许您获得具有指定参数类型的确切方法 现在,有没有一种方法可以调用该方法,而不是调用它来自的对象,而是调用同一类的不同实例 编辑:好的,忽略我的第一次

我想传递一个方法并存储它。假设该方法接受一个int并返回void。我会把它包装成动作

现在,有没有一种方法可以调用该方法,而不是调用它来自的对象,而是调用同一类的不同实例

很难比这更具体,但请询问是否有任何地方令人困惑,我会再试一次。

您可以使用which-takes参数类型。这使您可以使用指定的参数类型获取确切的方法。

您可以使用,它接受参数类型。这允许您获得具有指定参数类型的确切方法

现在,有没有一种方法可以调用该方法,而不是调用它来自的对象,而是调用同一类的不同实例

编辑:好的,忽略我的第一次尝试。我以为你说的是另一门课

听起来您实际上应该在
操作
(或更强类型的版本)中包装该方法

或者,您可以使用以下方法创建新代理:

Action<int> newAction = (Action<int>) Delegate.CreateDelegate(typeof(Action<int>),
                                          newTarget,
                                          oldAction.Method);
Action newAction=(Action)Delegate.CreateDelegate(typeof(Action),
新目标,
方法);
现在,有没有一种方法可以调用该方法,而不是调用它来自的对象,而是调用同一类的不同实例

编辑:好的,忽略我的第一次尝试。我以为你说的是另一门课

听起来您实际上应该在
操作
(或更强类型的版本)中包装该方法

或者,您可以使用以下方法创建新代理:

Action<int> newAction = (Action<int>) Delegate.CreateDelegate(typeof(Action<int>),
                                          newTarget,
                                          oldAction.Method);
Action newAction=(Action)Delegate.CreateDelegate(typeof(Action),
新目标,
方法);

这是非常不切实际的。。。为什么他们不让我改变目标财产?另外,我猜这个方法很慢,对吧?@达尔文:你为什么认为它“非常不切实际”?他们不允许您“仅仅更改目标”,因为它是在完全不同的类型上声明的方法。见鬼,甚至不能保证有这样的方法。我觉得这完全合理。至于它是否“非常慢”——这都是相对的。你很可能想缓存查找这种方法的结果。@Darwin:等等,我想我完全误解了这个问题。。。编辑,谢谢!我做了一个基准测试来比较这个方法和一个实例上的常规调用。差别似乎非常小。你能看看我的基准测试,看看我是否遗漏了什么吗?产出约2100~1990@Darwin我觉得这很合理。当然,重要的一点是它在您的实际用例中是否足够小:)这是非常不切实际的。。。为什么他们不让我改变目标财产?另外,我猜这个方法很慢,对吧?@达尔文:你为什么认为它“非常不切实际”?他们不允许您“仅仅更改目标”,因为它是在完全不同的类型上声明的方法。见鬼,甚至不能保证有这样的方法。我觉得这完全合理。至于它是否“非常慢”——这都是相对的。你很可能想缓存查找这种方法的结果。@Darwin:等等,我想我完全误解了这个问题。。。编辑,谢谢!我做了一个基准测试来比较这个方法和一个实例上的常规调用。差别似乎非常小。你能看看我的基准测试,看看我是否遗漏了什么吗?产出约2100~1990@Darwin我觉得这很合理。当然,重要的一点是它在实际用例中是否足够小:)