我正在通过COM互操作将C#类导出到VB6。 似乎没有我设置的默认COM属性!
C#类如下:
[ComVisible(true), ClassInterface(ClassInterfaceType.AutoDual)]
class Foo
{
public int I { get; set; }
public bool B { get; set; }
public int Value { get; set; } // <--- the culprit
public string S { get; set; }
}
(我知道why should I not use autodual-请忽略这一点,它对于该阶段的开发非常有用)
属性Value
在VB6中表现为默认值。在对象浏览器中以这种方式显示。但是请注意,我尚未设置DispId
attribute来表示默认值。
此外,在OLEView中,您可以看到在IDL
的{{1}}中,程序集的Value属性具有attribute TLB
。 is equivalent to [id(00000000), propget]
。因此,出于某种原因,编译器或TLBEXP或其他原因将DISPID_VALUE
明确设为默认值。
为什么会这样?实际上,我不想要一个默认属性,它的存在掩盖了“偶然”的编码错误,基本上是偶然的。