最近,我收到了 VB.Net 用户关于 strange overload resolution failure 的错误报告升级到较新版本的 OpenTK 时:错误 1“Uniform3”不明确,因为类“OpenTK.Graphics.OpenGL.GL”中存在多种具有此名称的成员
为什么这么奇怪?因为所讨论的重载在库的旧版本和新版本之间是相同的!
后来进行了一些测试,我设法在一个小测试用例中隔离了问题:
// C# library - this one works
namespace Test
{
public partial class GL
{
public static void Foo(float bar) { }
}
public partial class GL
{
public static void Foo(int bar) { }
public static void Foo(ref int bar) { }
}
}
VB.Net 可以毫无问题地使用上述代码。但是,如果我重新排序这两个部分类:
// C# library - this one fails
namespace Test
{
public partial class GL
{
public static void Foo(int bar) { }
public static void Foo(ref int bar) { }
}
public partial class GL
{
public static void Foo(float bar) { }
}
}
我失败了!
VB.Net 代码如下所示:
REM VB.Net code that consumes the C# library
Module Module1
Sub Main()
Test.GL.Foo(0)
End Sub
End Module
这是怎么回事?!为什么两个部分类的顺序很重要?
更重要的是,是否有比重新排序 C# 代码文件并希望编译器以一种方式而不是另一种方式使用它们更好的解决方案? (例如,在 VB.Net 中的重载解析期间,是否有一些我可以应用的属性来从考虑中删除其中一个重载?)
最佳答案
我通过更改重载在已编译二进制文件中出现的顺序解决了这个问题。这在许多不同方面都很糟糕,但目前看来效果还不错。
关于c# - vb.net 重载解析失败,出现 "multiple members with this name exist in class",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21731486/