C#: ненулевые массивы не CLS-совместимы

Я знаю, что на этот вопрос уже есть ответ, но хорошо иметь его здесь для дальнейшего использования:

На странице свойств решения Свойства конфигурации -> Конфигурация будет отображен список проектов и В последнем столбце «Сборка» будут установлены флажки, по одному для каждого проекта. Если все они не отмечены, вы нажмете F6, но ничего не произойдет. Проверьте проекты, которые вы хотите построить, на этот случай, и теперь вы можете ударить F6.

10
задан Andreas Grech 5 June 2009 в 15:06
поделиться

4 ответа

CLS (спецификация общего языка) закладывает основу для общего набора правил соответствия, который гарантирует, что другие языки (VB.NET, F #, и т. д.) могут использовать сборки, созданные с помощью C #. Массив с ненулевым основанием не будет совместим, поскольку другие языки ожидают, что массивы будут начинаться с нуля.

Вот пример, который легче понять:

class Foo
{
    public void Bar() { }
    public void bar() { } 
}

Этот тип не будет совместим с CLS, поскольку он содержит два члена, которые отличаются по имени только по типу. Как кто-то, использующий VB.NET, сможет определить неоднозначность между Bar и bar , если компилятор VB.NET не чувствителен к регистру?

Итак, в основном CLS представляет собой набор правил вроде этого чтобы гарантировать взаимодействие между языками.

27
ответ дан 3 December 2019 в 13:47
поделиться

Соответствие CLS в основном связано с тем, чтобы ваш код был максимально совместим с другими языками, насколько это возможно. Он включает в себя такие вещи, как закрытие публичных членов, которые различаются только регистром (что может сбить с толку VB, который нечувствителен к регистру). См. Эту статью MSDN для получения дополнительной информации, а также саму спецификацию общего языка .

12
ответ дан 3 December 2019 в 13:47
поделиться

В дополнение к сказанному, массивы с ненулевым отсчетом существуют исключительно для облегчить переход для существующего кода VB6 (в основном с помощью инструмента автоматической миграции), поскольку в VB6 индексирование массива может начинаться с произвольного числа, не обязательно с нуля.

Из-за проблемы соответствия CLS (и других соображений) не рекомендуется когда-либо использовать их в .NET (даже при программировании VB.NET). Кроме того, их использование весьма ограничено. Это'

2
ответ дан 3 December 2019 в 13:47
поделиться

Кроме того,

Если ваше приложение не предназначен для работы с другими программами - поскольку это автономный модуль, который вы не будете продавать как общедоступную библиотеку классов другим людям, не беспокойтесь об этом слишком сильно.

Но другие комментарии здесь являются правильно при разработке библиотеки универсальных классов.

Всегда рекомендуется использовать [assembly: CLSCompliant (true)], но это не критично для запуска вашего приложения.

0
ответ дан 3 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: