IT TIP

밑줄이있는이 이름이 CLS 규격이 아닌 이유는 무엇입니까?

itqueen 2021. 1. 9. 11:10
반응형

밑줄이있는이 이름이 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 파일에이 줄을 포함합니다.

이 오류를 해결하려면 다음 중 하나를 수행하십시오.

  1. 속성 이름 변경 (권장) :

    protected bool isNew;
    
  2. 전체 어셈블리를 비 CLS 규격으로 설정합니다.

    [assembly: CLSCompliant(false)]
    
  3. 속성에만 속성을 추가합니다.

    [CLSCompliant(false)]  
    protected bool _isNew;
    
  4. 속성 범위를 변경하여 어셈블리 외부에서 볼 수 없도록합니다.

    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

반응형