首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可以将任意方法组作为参数传递给方法吗?

可以将任意方法组作为参数传递给方法吗?
EN

Stack Overflow用户
提问于 2009-12-25 00:15:15
回答 4查看 13.7K关注 0票数 24

我想写一个如下所示的函数

代码语言:javascript
复制
// The type 'MethodGroup' below doesn't exist.  This is fantasy-code.
public void MyFunction(MethodGroup g)
{
    // do something with the method group
}

后者,我可以使用任何方法组调用MyFunction。就像这样。

代码语言:javascript
复制
MyFunction(Object.Equals)

如果我提交一个签名,那么一切都会正常工作。

代码语言:javascript
复制
public void MyFunction(Func<object, object, bool> f)
{
    // do something with known delegate
}
...
MyFunction(Object.Equals)

方法组Object.Equals被强制转换为已知的委托类型Func<object, object, bool>,但我不想提交特定的签名。我希望将任何方法组传递给MyFunction

方法组不能转换为System.Object

代码语言:javascript
复制
public void MyFunction(object o)
{
    // do something with o
}
...
MyFunction(Object.Equals) // doesn't work

我认为每个人都忘记了方法调用中的大括号,并在某个时候发现了这一点。我希望这并不意味着方法组不能(或不能被转换)为第一类对象。

我不认为Linq表达式会给出我想要的那种通用性,但我肯定会遗漏一些东西。

我还应该提到,如果方法组包含重载,这将是很好的,只要我有一种检查方法组的方法。

我可以打印组中所有方法的所有签名(重载,扩展方法等),或者我可以用一些参数‘调用’组(如果可能的话,让它解析为组中正确的重载)。还有其他方法可以做这些事情,但它们是你可能想要用方法组做的一些事情。

正如一些人所提到的,当我调用MyFunction时,我可以接受一个Delegate,并转换为一个特定的已知委托类型。

代码语言:javascript
复制
public void MyFunction(Delegate d)
{
    // do something with d
}
...
MyFunction((Func<object, object, bool>)Object.Equals)

但这与传递整个方法组并不完全相同。这将从组中选择一个方法,并将其转换为特定的委托。我真的很想一次通过整个团队。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1958880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档