8 ответов:
CLS-совместимые языковые компиляторы должны следовать правилам приложения 7 к техническому отчету 15 стандарта Unicode 3.0, который регулирует набор символов, которые могут начинаться и включаться в идентификаторы. Этот стандарт доступен на веб-сайте консорциума Unicode.
Если вы посмотреть:
то есть, первый символ идентификатор может быть прописной буквой, строчной буквой, заглавной буквой, буквой модификатора, другой буквой или номером буквы. Последующие символы идентификатора могут быть любыми из них, а также знаками без интервалов, знаками объединения интервалов, десятичными числами, знаками препинания соединителя и кодами форматирования (например, знак справа налево). Обычно коды форматирования должны быть отфильтрованы перед сохранением или сравнением идентификаторов.
в принципе, вы не можете запустить идентификатор с помощью подчеркивание-это нарушает CLS-совместимый на видимом (общедоступном/защищенном) поле.
CLS compliance имеет отношение к взаимодействию между различными языками .NET. Свойство не соответствует CLS, так как оно начинается с символа подчеркивания и является общедоступным (примечание: к защищенным свойствам в общедоступном классе можно получить доступ извне сборки). Хотя это будет работать, если доступ к свойству осуществляется из C#, это может быть не так, если он доступен из других языков .NET, которые не позволяют подчеркивания в начале имен свойств, следовательно, это не так CLS-совместимый.
вы получаете эту ошибку компилятора, потому что где-то в вашем коде вы обозначили свою сборку как CLS совместимую со строкой что-то вроде этого:
[assembly: CLSCompliant(true)]Visual Studio включает эту строку в AssemblyInfo.CS файл, который можно найти в разделе свойства в большинстве проектов.
чтобы обойти эту ошибку, вы можете либо:
переименовать вашу собственность (рекомендуется):
protected bool isNew;установите всю сборку в соответствии с CLS:
[assembly: CLSCompliant(false)]добавить атрибут только для вашего имущества:
[CLSCompliant(false)] protected bool _isNew;измените область действия свойства, чтобы его нельзя было увидеть за пределами сборки.
private bool _isNew;
ведущий подчеркивание одновременно с
_isNewбыть видимым (т. е. не частным).
подчеркивание вызывает проблему. Обычная практика заключается в том, что подчеркивание зарезервировано для частного поля. защищенные / открытые члены должны быть надлежащим образом защищены и названы.
например:
public abstract class DomainObjectBase{ private bool _isNew; protected bool IsNew { get { return _isNew; } set { _isNew = value;} } }или, если вы хотите использовать 3.X и избавиться от частного поля:
public abstract class DomainObjectBase{ protected bool IsNew { get; set; } }
Это подчеркнуть. Смотрите это статьи.
ведущий _ не соответствует CLS
Microsoft StyleCop проанализирует ваш код и предоставит ссылки на соответствующие документы, объясняющие, почему он не соответствует CLS.
Comments