我遇到过一种明确的奇怪情况,但重载解析器并不这么认为。考虑:
public static class Program
{
delegate int IntDel();
delegate string StringDel();
delegate void ParamIntDel(int x);
delegate void ParamStringDel(string x);
static void Test(IntDel fun) { }
static void Test(StringDel fun) { }
static void ParamTest(ParamIntDel fun) { }
static void ParamTest(ParamStringDel fun) { }
static int X() { return 42; }
static void PX(int x) { }
public static void Main(string[] args)
{
ParamTest(PX); // OK
Test(X); // Ambiguos call!
}
}
怎么打来电话ParamTest
重载已正确解决,但是Test
过载是不明确的?
也许是因为https://msdn.microsoft.com/en-us/library/aa691131%28v=vs.71%29.aspx https://msdn.microsoft.com/en-us/library/aa691131%28v=vs.71%29.aspx
具体来说,方法的签名不包括返回类型,也不包括可能为最右边的参数指定的 params 修饰符。
和之间唯一的区别IntDel
and StringDel
是在返回值中。
进一步来说:https://msdn.microsoft.com/en-us/library/ms173171.aspx https://msdn.microsoft.com/en-us/library/ms173171.aspx
在方法重载的上下文中,方法的签名不包括返回值。但在委托上下文中,签名确实包含返回值。换句话说,方法必须具有与委托相同的返回类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)