Как автор библиотеки OSS, я всегда старался сделать свой материал CLS совместимым. Но MS не делает это легко. Они часто ставят вас в ситуации catch-22, такие как:Практические ограничения с узлами, не отмеченными как CLS-совместимые?
- Вы не можете иметь защищенную переменную, отличающуюся только в случае публичного имущества.
- Вы не можете иметь защищенные или общедоступные переменные, начинающиеся с символа подчеркивания или «m_».
- Если вы хотите сделать класс действительно расширяемым, вам часто приходится нуждаться в, чтобы иметь защищенные переменные, соответствующие общедоступным свойствам. Ваш наименее уродливый выход состоит в том, чтобы добавить суффикс к переменной, например «Var» или «Value». Это противно и неприемлемо для меня. Мне нравится чистый код.
Я знаю языки .NET, которые не поддерживают переменные, начинающиеся с подчеркивания, и я использовал их во многих местах, где переменная должна быть видимой для подклассов.
Я устал от предупреждений, и планирую отключить соблюдение CLS на уровне сборки в моих 30+ библиотеках C#.
Есть ли актуальные проблемы с отключением соответствия CLS библиотекам? Любой real проблемы с этим?
Корпорация Майкрософт выпустила неопровержимые рекомендации по программному обеспечению на протяжении десятилетий, при этом менее 5% от этого стоило байтов, в которые оно было закодировано. Я не могу найти никаких доказательств того, что эта передовая практика оказывает какое-либо влияние на что-либо.
Но, чтобы быть осторожным, я проверяю.
И нет, это не дубликат обратного этого вопроса: Any reason not to mark a DLL as CLSCompliant?
Я ищу фактических результатов и эффектов здесь, а не советы MS стажера.
Например, если IronPython, IronRuby или F # не могут прочитать или записать переменную, начинающуюся с подчеркивания, это эффект, хотя это может вызвать проблемы для пользователей, наследующих определенные объекты.
Если язык или инструмент полностью не могут использовать сборку, если только она не маркирована CLS-совместимой, теперь это большое дело.
-1. Ни один из случаев, которые вы приводите в качестве примера, не имеет никакого смысла. – TomTom
@TomTom: Я согласен, таким образом, мой ответ ниже, но я все еще думаю, что вопрос сам по себе действителен. Существуют и другие допустимые случаи, которые препятствуют соблюдению CLS. Один пример из моего текущего проекта: название проекта - REM. Корневое пространство имен всех проектов в решении - 'Rem.'. Если REM является зарезервированным ключевым словом на некоторых языках, это предотвращает соответствие CLS. –
Да. IO - просто поклонник hugh, делающий случай ПРАВИЛЬНО или смеясь. ОП все время держал мир, чтобы сесть и придумать ОДИН разумный случай. – TomTom