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;
Вы, вероятно, не должна быть маркировка, не закрытые члены с подчеркиванием в любом случае. Я знаю, что у каждого свой стиль, но другие почти наверняка думают, что поле закрыто вне конвенции. –
@EdS. Какая конвенция? – Pharap
Кажется, что это было соглашение VB за один раз, оно также не соответствует стилю для C++, C#, более подробная информация, чем в этом поле, найденном здесь: https://stackoverflow.com/questions/3136594/naming- условные символы-undccore-in-cc-переменные – MatthewMartin