Я экспортирую класс C # в VB6 через COM-взаимодействие. Кажется, у него есть свойство 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; }
}
(я знаю почему я не должен использовать autodual - пожалуйста, не обращайте на это внимания, это полезно для данного этапа разработки)
Свойство Value
ведет себя как значение по умолчанию в VB6.Это показано в браузере объектов.Но обратите внимание, что я не установил атрибут DispId
для указания значения по умолчанию.
Кроме того, в OLEView вы можете видеть это в IDL
TLB
для сборкисвойство Value имеет атрибут [id(00000000), propget]
.Это эквивалентно DISPID_VALUE
.Итак, по какой-то причине компилятор или TLBEXP или что-то явно делает Value
значением по умолчанию.
Почему это происходит?Я на самом деле не хочу свойство по умолчанию, и его существование маскировало ошибку кодирования, которая "просто сработала", в основном случайно.