문제

나는 현재 읽고있다 알바바리'에스 간단히 말해서 C# 3.0 그리고 pg. 241, 배열 인덱싱에 대해 이야기하는 동안 그는 다음과 같이 말합니다.

비 제어 기반 배열은 CLS가 아닙니다 (공통 언어 사양)-완화

비존이 아닌 배열이 아닌 것은 정확히 무엇을 의미합니까? CLS 준수 ? 그리고 코드에 어떤 영향을 미칩니 까?

업데이트

여기 책의 페이지에 대한 링크입니다.

도움이 되었습니까?

해결책

CLS (Common Language Specification)는 다른 언어 (vb.net, f#등)가 C#으로 구축 한 어셈블리를 사용할 수 있음을 보장하는 규정 준수 규칙 세트에 대한 토대를 마련합니다. 다른 언어는 배열이 0 기반이 될 것으로 기대하기 때문에 0이 아닌 기반 어레이는 준수하지 않습니다.

다음은 이해하기 쉬운 예입니다.

class Foo
{
    public void Bar() { }
    public void bar() { } 
}

이 유형은 할 것입니다 ~ 아니다 CLS는 유형별로만 이름이 다른 두 멤버가 포함되어 있으므로 CLS를 준수합니다. vb.net을 사용하는 사람이 어떻게 명확하게 지우겠습니까? Bar 그리고 bar VB.NET 컴파일러가 대소 문자를 사용하지 않기 때문에?

따라서 기본적으로 CLS는 언어 간의 상호 운용성을 보장하기 위해 이와 같은 많은 규칙입니다.

다른 팁

CLS 준수는 주로 코드가 가능한 한 다른 언어와 크게 호환되는지 확인하는 것입니다. 여기에는 사례에 따라 다른 공공 회원을 노출시키지 않는 것과 같은 것이 포함됩니다 (VB를 혼동하는 경우, 즉, 사례에 민감하지 않습니다). 이것 좀 봐 MSDN 기사 더 많은 정보와 함께 공통 언어 사양 그 자체.

나는 vb6에서 배열 인덱싱이 임의의 숫자에서 시작될 수 있기 때문에 기존 VB6 코드 (주로 자동 마이그레이션 도구에 의해)의 전환을 용이하게하기 위해 전적으로 제로 기반 배열이 존재한다고 말한 내용을 추가합니다.

CLS 준수 문제 (및 기타 고려 사항)로 인해 .NET (VB.NET을 프로그래밍 할 때에도)에서 사용하는 것이 좋습니다. 또한, 그들의 사용은 다소 제한적입니다. 클래스 내부의 배열을 캡슐화하고 적절한 인덱스 액세스 연산자를 작성하여 오프셋 번역을 수행하는 것이 더 쉽습니다.

또한,

응용 프로그램이 다른 프로그램과 함께 작업하지 않으려는 경우 - 다른 사람들에게 공개 수업 도서관으로 판매하지 않는 자체 포함 단위이므로 너무 걱정하지 마십시오.

그러나 일반적인 클래스 라이브러리를 개발할 때 여기의 다른 의견은 정확합니다.

어셈블리 : clscompliant (true)]를 사용하는 것은 항상 좋은 관행이지만 응용 프로그램을 실행하는 것은 중요하지 않습니다.

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