我用两种方法在MSIL中制作了一个小DLL:
float AddNumbers(int, int)
int AddNumbers(int, int)
你们中有些人可能知道,MSIL 允许您创建具有相同参数的方法,只要您具有不同类型的返回类型(称为返回类型重载)。现在,当我尝试从 C# 使用它时,正如我所期待的那样,它引发了一个错误:
float f = ILasm1.MainClass.AddNumbers(1, 2);
错误是:
以下方法或属性之间的调用是不明确的:
'ILasm1.MainClass.AddNumbers(int, int)' 和 'ILasm1.MainClass.AddNumbers(int, int)'
c#真的无法区分不同的返回类型吗?我知道我无法编写仅具有不同返回类型的方法,但我总是假设它知道如何处理它。
ECMA-334 C# 第 8.7.3 节
方法的签名包括
方法名称和编号,
修饰语及其形式的类型
参数。方法的签名
不包括返回类型。
您可以使用通用方法:
T AddNumbers<T>(int a, int b)
{
if (typeof(T) == typeof(int) || typeof(T) == typeof(float))
{
return (T)Convert.ChangeType(a + b, typeof(T));
}
throw new NotSupportedException();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)