문제

표시되는 이유는 무엇입니까 컴파일러 경고

식별자'논리입니다.DomainObjectBase._isNew'지 않 CLS

다음 코드는?

public abstract class DomainObjectBase
{
    protected bool _isNew;
}
도움이 되었습니까?

해결책

일반적인 언어를 사양:

CLS 언어 컴파일러의 규칙에 따라 부속서 7 의 기술적인 보고서에 15 일의 유니코드 표준 3.0 제어하는 문자 집합을 시작할 수 있는 포함되어야에서 식별자가 있습니다.이 표준은 웹에서 사용 가능한 사이트의 유니코드 컨소시엄.

는 경우 보이지:

는 첫 번째 문자의 식별할 수 있는 대문자 소문자,titlecase 문자,수정 문자,다른 문자,또는 문자를 번호입니다.후속의 캐릭터는 식별할 수 있는 모든 사람들의 플러스 비 간격을 표시,간격이 결합하는 표시,소수점,커넥터 구두점,그리고 형식 지정 코드(와 같은 오른쪽에서 왼쪽-mark).일반적으로 형식 지정 코드로 필터링해야 합니다 밖으로 저장하기 전에 비교하거나 식별자가 있습니다.

기본적으로,당신은 시작할 수 없는 식별자는 밑줄로 이를 위반 CLS 규정을 준수하는 표시(공공/보호)다.

다른 팁

CLS 준수 다른 것들 사이의 상호 운용성과 관련이 있습니다 .그물 언어. 속성은 밑줄로 시작하여 공개적이기 때문에 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를 준수합니다

마이크로 소프트 스타일 콥 코드를 분석하고 CLS를 준수하지 않는 이유를 설명하는 관련 문서에 대한 링크를 제공합니다.

데이터 구성원의 이름이기 때문에 _isNew, 시작은 밑줄이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top