밑줄이있는이 이름이 CLS 규격이 아닌 이유는 무엇입니까?
컴파일러 경고가 표시되는 이유
식별자 'Logic.DomainObjectBase._isNew'가 CLS 규격이 아닙니다.
다음 코드는?
public abstract class DomainObjectBase
{
protected bool _isNew;
}
로부터 공용 언어 사양 :
CLS 호환 언어 컴파일러는 시작하고 식별자에 포함될 수있는 문자 집합을 관리하는 유니 코드 표준 3.0의 기술 보고서 15의 부록 7 규칙을 따라야합니다. 이 표준은 Unicode Consortium의 웹 사이트에서 구할 수 있습니다.
당신이 경우 이를 조회 :
즉, 식별자의 첫 번째 문자는 대문자, 소문자, 제목 문자, 수정 자 문자, 기타 문자 또는 문자 번호 일 수 있습니다. 식별자의 후속 문자는 공백이없는 표시, 공백 결합 표시, 십진수, 커넥터 구두점 및 서식 코드 (예 : 오른쪽-왼쪽 표시)가 될 수 있습니다. 일반적으로 형식 지정 코드는 식별자를 저장하거나 비교하기 전에 필터링해야합니다.
기본적으로 밑줄로 식별자를 시작할 수 없습니다. 이것은 표시 (공개 / 보호) 필드에서 CLS 규격을 위반합니다.
CLS 규정 준수 는 서로 다른 .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 규격 식별자는 밑줄로 시작하면 안됩니다.
선행 _는 CLS를 준수하지 않습니다.
Microsoft StyleCop 은 코드를 분석하고 CLS 규격이 아닌 이유를 설명하는 관련 문서에 대한 링크를 제공합니다.
Because the name of the data member, _isNew
, start's with an underscore.
ReferenceURL : https://stackoverflow.com/questions/1195030/why-is-this-name-with-an-underscore-not-cls-compliant
'IT TIP' 카테고리의 다른 글
Scala에 경로 또는 파일이 있는지 확인하는 방법 (0) | 2021.01.09 |
---|---|
Ruby는 이러한 파일을로드 할 수 없습니다-active_support / core_ext / object / blank (0) | 2021.01.09 |
.htaccess로 사이트를 리디렉션하지만 하나의 폴더 제외 (0) | 2021.01.09 |
배열 크기 변경 (0) | 2021.01.09 |
문자열을 문자열 []로 변환하는 방법? (0) | 2021.01.09 |