VB.Net构造函数顺序很重要?

为什么构造函数ORDER在VB.Net中很重要?我正在构建一个.Net类型库,它旨在完全包装底层的COM库,以便API的使用者可以假装使用带有.Net集合的漂亮的.Net库而不是COM库.

目前我的大多数类只是使用Reflection和CodeDOM构建的1到1个包装器.这些类有一个内部构造函数,它将底层的COM类型作为参数. CodeDOM将其构建为该类的第一个构造函数.使用C#中的这些类证明没问题.我需要的只是对.Net库的引用,一切都很好.

当我尝试从VB.Net项目中使用这些类时出现问题.如果第一个构造函数具有COM类型作为参数,则VB.Net项目需要COM互操作程序集作为参考.如果第一个构造函数没有参数或只有托管类型,则一切正常.我的类库是用C#编写的.

以下作品:

public class ObjectID
{
    public ObjectID(int type, int id)
    {
        this.Type = type;
        this.ID = id;
    }

    internal ObjectID(COMLib.ObjectID id) : this(id.Type, id.ID) { }

    public int ID { get; set; }
    public int Type { get; set; }

    internal COMLib.ObjectID ToCOM()
    {
        COMLib.ObjectID id = new COMLib.ObjectID();
        id.ID = this.ID;
        id.Type = this.Type;
        return id;
    }
}

以下需要对COMLib.Interop程序集的引用:

public class ObjectID
{
    internal ObjectID(COMLib.ObjectID id) : this(id.Type, id.ID) { }

    public ObjectID(int type, int id)
    {
        this.Type = type;
        this.ID = id;
    }

    public int ID { get; set; }
    public int Type { get; set; }

    internal COMLib.ObjectID ToCOM()
    {
        COMLib.ObjectID id = new COMLib.ObjectID();
        id.ID = this.ID;
        id.Type = this.Type;
        return id;
    }
}

现在我可以通过为这些类创建一个虚拟私有构造函数作为第一个构造函数来解决这个问题,但我对这是什么原因更加好奇?为什么构造函数声明的顺序在VB.Net中很重要?

更新

这听起来很疯狂,我开始怀疑自己.管理用3个项目复制它.

C#类库:Wrapped

namespace Wrapped
{
    public class Class1
    {
    }
}

C#类库:包装器

namespace Wrapper
{
    public class Class1
    {
        internal Class1(Wrapped.Class1 c) { }
        public Class1() { }
    }
}

VB.Net控制台应用程序:Referer

Module Module1
    Sub Main()
        Dim w As New Wrapper.Class1
    End Sub
End Module

包装是指包装
Referer指的是Wrapper
Referer不引用Wrapped

Dim w As New Wrapper.Class1

产生错误

Reference required to assembly 'Wrapped, Version=1.0.0.0,
                                         Culture=neutral,
                                         PublicKeyToken=null'
containing the type 'Wrapped.Class1'.
Add one to your project.

交换构造函数的顺序可以解决错误.

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=442224

在玩了一些之后更新

Causes error:          No error:

     Vb-ReferTest          Vb-RefererTest
          |                      |                     Fixes error in Vb-
          V                      V                      RefererTest even
      Cs-Wrapper            Cs-Wrapper   Vb-Wrapper <-  if the Vb-Wrapper
          |                       \         /          and the RefererTest
          V                        V       V             have no direct
   Cs-WrappedLibrary           Cs-WrappedLibrary          relationship
如果正确(我不能轻易验证),那就是迷人.订单无关紧要,AFAIK.如果你确定,那么可能是 log as a bug on connect(带有示例代码).
相关文章
相关标签/搜索