最近,当我升级到较新版本的OpenTK时,我收到了VB.Net用户关于strange overload resolution failure的错误报告:Error 1 'Uniform3' is ambiguous because multiple kinds of members with this name exist in class '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中的重载解析期间,是否有一些属性我可以应用于删除其中一个重载?)
答案 0 :(得分:0)
我通过更改编译二进制文件中出现重载的顺序解决了这个问题。这在很多方面都很糟糕,但现在似乎运作良好。