Why do I get the compiler warning
Identifier 'Logic.DomainObjectBase._isNew' is not CLS-compliant
for the following code?
public abstract class DomainObjectBase
{
protected bool _isNew;
}
From the Common Language Specification:
CLS-compliant language compilers must follow the rules of Annex 7 of Technical Report 15 of the Unicode Standard 3.0, which governs the set of characters that can start and be included in identifiers. This standard is available from the Web site of the Unicode Consortium.
If you look this up:
That is, the first character of an identifier can be an uppercase letter, lowercase letter, titlecase letter, modifier letter, other letter, or letter number. The subsequent characters of an identifier can be any of those, plus non-spacing marks, spacing combining marks, decimal numbers, connector punctuations, and formatting codes (such as right-left-mark). Normally the formatting codes should be filtered out before storing or comparing identifiers.
Basically, you can't start an identifier with an underscore - this violates CLS compliant on a visible (public/protected) field.