Как автор библиотеки OSS, я всегда старался сделать свои вещи совместимыми с CLS. Но MS не делает это легко. Они часто ставят вас в ловушку 22 ситуаций, таких как:
- Вы не можете иметь защищенную переменную, отличающуюся только регистром от общего свойства.
- Вы не можете иметь защищенные или общедоступные переменные, начинающиеся с подчеркивания или 'm_'.
- Если вы хотите сделать класс действительно расширяемым, вам часто нужно , чтобы иметь защищенные переменные, соответствующие открытым свойствам. Ваш наименее уродливый выход - добавить к переменной суффикс, такой как «Var» или «Value». Это противно и неприемлемо для меня. Мне нравится чистый код.
Я не знаю ни одного языка .NET, который бы не поддерживал переменные, начинающиеся с подчеркивания, и я использовал их во многих местах, где переменная должна быть видна подклассам.
Я устал от предупреждений, и я планирую отключить соответствие CLS на уровне сборки в моих 30+ библиотеках C #.
Есть ли реальные проблемы с отключением CLS-совместимости для библиотек? Есть ли настоящие проблемы с этим?
Microsoft издавала непослушное руководство по программному обеспечению в течение десятилетий, при этом менее 5% от него стоило тех байтов, в которых оно было закодировано. Я не могу найти никаких доказательств того, что эта лучшая практика имеет какой-либо реальный эффект на что угодно.
Но, чтобы быть осторожным, я проверяю.
И нет, это не дубликат этого вопроса: Есть ли причина не отмечать DLL как CLSC-совместимую?
Я ищу реальные результаты и эффекты здесь, а не совет стажера MS.
Например, если IronPython, IronRuby или F # не могут прочитать или записать переменную, начинающуюся с подчеркивания, это является эффектом, хотя это вызовет проблемы только у пользователей, создающих подклассы определенных объектов.
Если язык или инструмент полностью не могут использовать сборку, если она не помечена как CLS-совместимая, то теперь это большое дело.