vb.net重载失败,“类中存在具有此名称的多个成员”

时间:2014-02-12 15:00:47

标签: c# vb.net opengl opentk

最近,当我升级到较新版本的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中的重载解析期间,是否有一些属性我可以应用于删除其中一个重载?)

1 个答案:

答案 0 :(得分:0)

我通过更改编译二进制文件中出现重载的顺序解决了这个问题。这在很多方面都很糟糕,但现在似乎运作良好。