c # — свойства переименовываются, когда их имя совпадает с типом данных, который они возвращают

Я сталкиваюсь со следующей проблемой:

Мои интерфейсы определены в C #. Я использую пользовательские перечисления в моих интерфейсах. Некоторые перечисления имеют то же имя, что и возвращаемый тип данных, например:

Foo Foo { get; }
Bar Bar { get; }

Я использую tlbexp, чтобы использовать модуль в C ++.
Свойства, которые имеют свое имя и тип данных, переименовываются из «Имя» в «_Name»:

Bar myEnumValue = pFoo-> Bar // не существует

Bar myEnumValue = pFoo -> _ Bar // это мое свойство ‘Bar’

До сих пор я не нашел никакой документации о причине и если / как я могу предотвратить это.
Я не получаю никаких предупреждений во время сборки или экспорта ..
Чтобы сделать использование моего модуля интуитивно понятным, я не хочу переименовывать свойство или перечисление.

Может кто-нибудь объяснить мне, почему это происходит?

2

Решение

В C ++ это не разрешено:

class B {};
class A {
B B;
};

потому что [basic.scope.class] 3.3.7/1:

Имя N, используемое в классе S, должно относиться к тому же объявлению в его контексте и при повторной оценке в завершенной области действия S. Для нарушения этого правила не требуется никакой диагностики.


Обратите внимание, что это относится только к объявлениям внутри класса, для области имен или области функций правила более сложны — иногда B B; разрешено, иногда нет.


Обновитьна самом деле это совершенно верно:

class B {};
class A {
::B B;
};

Таким образом, вы можете попытаться сделать tlbexp генерировать код, как это.

1

Другие решения


По вопросам рекламы [email protected]