Есть ли свойство по умолчанию по умолчанию? - PullRequest
0 голосов
/ 03 декабря 2018

Я экспортирую класс 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 значением по умолчанию.

Почему это происходит?Я на самом деле не хочу свойство по умолчанию, и его существование маскировало ошибку кодирования, которая "просто сработала", в основном случайно.

...