Это старая, старая проблема с перечислениями, датированная как минимум на языке C. Язык, в котором члены перечисления добавляются в глобальное пространство имен. Должен быть вам знаком, VBA тоже это делает. Это довольно уродливая проблема, очень мало масштабируется в больших программах. Значение .NET enum как FileShare.Read
не может быть экспортировано как Read
. Почти гарантированно возникает имя идентификатора или столкновение ключевых слов.
Два основных трюка используются программистами, чтобы избежать таких столкновений. Общее в C - это верхний регистр члена перечисления. Конечно, не будет хорошо работать на языке, таком как VB. И другой трюк - префикс короткая строка.
Уловка, которую вы видите, используется автором библиотеки типа ADODB, он префикс dbUse
. И это трюк, который, как вы видите, используется экспортером библиотеки .NET, он префикс имени типа перечисления. И важно, чтобы вы поняли, что используете трюк, вы префикс Test
. Возможно, что-то, что вы сделали, не осознавая этого, вы просто привыкли к этому.
Но это больше не является необходимым или необходимым в VB.NET. Гораздо более разумным способ, чтобы написать, что это перечисление:
<ComVisible(True)> _
Enum Test
Type1 = 1
Type2 = 2
Type3 = 3
End Enum
И вы бы использовать, скажем, Test.Type1
вместо уродливой тавтологии TestTypes.TestType1
в коде VB.NET.
И теперь экспортер библиотеки типов производит гораздо более приятные имена членов перечисления, такие как Test_Type1
.
Вы не можете избавиться от подчеркивания без серьезной операции, вам придется писать декларации в IDL (как это сделал ADODB-автор) и импортировать библиотеку типов, сгенерированную MIDL, обратно в вашу программу. Не совсем стоит хлопот.
Что еще вы ожидаете увидеть? – cyboashu
Я добавил 2 фото. Один показывает, что я вижу, и показывает другие перечисления. – darbid
com callable wrappers не будут идеально отражать то, что вы видите в .NET при использовании в COM-среде, потому что COM-технология действительно старая и ограничена в том, что она может делать по сравнению с управляемой средой программирования .net. Что не так с этими именами? Я не думаю, что с ними что-то не так ... они работают, не так ли? –