我创建了以下函数:
public void DelegatedCall(Action<Object> delegatedMethod)
并定义了以下方法
public void foo1(String str) { }
但是,当我尝试打电话时DelegateCall
with foo1
:
DelegatedCall(foo1);
...我收到以下编译器错误:
Argument 1: cannot convert from 'method group' to 'System.Action<object>'
此错误的原因是什么以及如何纠正?不幸的是,铸造foo1
to Action
不是一个选择。
DelegatedCall
期望一个代表接受任何object
作为一个论点。但你的功能foo1
你正在传递给DelegatedCall
只能应对一个string
争论。因此,转换不是类型安全的,因此是不可能的。
输入参数为逆变 https://stackoverflow.com/tags/contravariance/info,但是你的代码需要协方差 https://stackoverflow.com/tags/covariance/info. (See 协变和逆变之间的区别 https://stackoverflow.com/questions/2184551/difference-between-covariance-contra-variance.)
你(们)能做到DelegatedCall
通用的:
DelegatedCall<T>(Action<T> action)
...或者让它接受任何代表:
DelegatedCall(Delegate action)
但实施起来却很丑陋,需要反思。它还不会在编译时验证该函数是否只有一个参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)