.NET의 'CLSCompliant'속성은 무엇입니까?


답변:


181

CLSCompliant다른 .NET 언어에서 클래스를 사용할 수있게 하려면 속성을 사용하여 클래스를 표시 합니다.
기본 규칙은 다음과 같습니다.

  1. 서명되지 않은 형식은 클래스의 공용 인터페이스에 속하지 않아야합니다. 이것이 의미하는 것은 퍼블릭 필드에는 uintor 와 같은 서명되지 않은 유형이 ulong없어야하고, 퍼블릭 메서드는 서명되지 않은 유형을 반환해서는 안되며, 공용 함수에 전달 된 매개 변수에는 서명되지 않은 유형이 없어야한다는 것입니다. 그러나 서명되지 않은 유형은 개인 구성원의 일부일 수 있습니다.

  2. 포인터 와 같은 안전하지 않은 유형은 public멤버 와 함께 사용하면 안됩니다 . 그러나 private멤버 와 함께 사용할 수 있습니다 .

  3. 클래스 이름과 멤버 이름은 사례에 따라 다를 수 없습니다. 예를 들어, 이름이 MyMethod및 인 두 개의 메소드를 가질 수 없습니다 MYMETHOD.

  4. 속성과 메서드 만 오버로드 될 수 있으며 연산자는 오버로드되지 않아야합니다.


모든 프로젝트의 기본값으로 그렇게 하시겠습니까?
Naeem Sarfraz

3
대부분 다른 .net 언어에 노출 될 수있는 언어 일 필요는 없습니다.
Otávio Décio

1
또 다른 제한 사항은 CS3006입니다. 참조 또는 출력 또는 배열 순위 만 다른 오버로드 된 메서드 'Foo.Bar (ref Baz)'는 CLS 규격이 아닙니다.
Drew Noakes

한 가지 더 : 공개 식별자는 밑줄 문자로 시작해서는 안됩니다.
Crono

44

코드의 다른 소비자에게 CLS 규격 임을 알리고 C # 컴파일러 가 CLS 규격인지 확인 합니다.

참조 된 기사에는 CLS 규정 준수에 대한 자세한 내용이 포함되어 있습니다.


12
따라서 속성을 추가 한 다음 불만없이 프로젝트를 빌드하면 프로젝트가 CLS를 준수하고 모두 양호하다는 것을 의미합니다.
Svish

@Svish, 그렇습니다. 규칙을 위반하면 컴파일러에서 알려줍니다.
Drew Noakes

41

다른 답변은 맞습니다. CLS는 공통 언어 사양 (Common Language Specification)의 약자입니다. .NET 언어가 구현하고 이해해야하는 최소한의 규칙과 필요한 언어 기능입니다. 이 세트는 .NET에서 유형이 정의되는 방식을 정의하는 공통 유형 시스템 의 서브 세트입니다 .

CLS를 준수한다는 것은 CLR에서 컴파일하고 실행할 수있는 모든 언어에서 사용할 수있는 코드를 작성할 수 있음을 의미합니다. 그러나 CLS 준수는 필요하지 않으므로 CLS 준수가 어렵거나 불가능한 경우에 유연성을 제공합니다.

다른 개발자가 코드를 사용하려면 API (공용 클래스 및 메서드)가 CLS를 준수해야합니다. CLSCompliantAttribute를 어셈블리에 추가하여이를 선언해야합니다. FxCop ( Framework Cop)이 나와 동의하지 않더라도 다른 사람을 위해 글을 쓰지 않으면 CLS 준수가 필요하지 않습니다 .

어셈블리가 CLSCompliantAttribute로 표시되면, 컴파일러는 (!해야합니다) 컴파일 할 때, 그것은 CLS 규칙의 (일부 위반하는 것입니다 있는지 확인하기 위해 코드를 확인합니다 ocdecio 고정 당신에게 언급) 및 보고서 위반.


FxCop이 나를 데려 왔습니다.
Teoman shipahi 2016 년

불행히도 CLR의 그랜드 비전은 VB.NET과 같은 다양한 프론트 엔드 언어를 가지고 있습니다. CLR을 지원하는 다른 언어는 선택적 매개 변수 및 out매개 변수와 같은 비 CLSCompliant 기능을 지원하는 데 아무런 문제가 없으므로 CLSCompliance를 완료하면 얻을 수있는 이점이 있습니다.
Dai

13

CLS 규격은 CLR에서 허용하는 전체 언어 스펙트럼의 하위 집합입니다. CLR을 대상으로하는 대부분의 언어에서 사용 가능한 하위 집합으로 제한합니다. 이렇게하면 CLR을 대상으로하는 모든 언어에서 라이브러리를 사용할 수 있다고 보장 할 수는 없습니다.


8

여기에 적합 : 전체 프로젝트 CLS 규격을 표시하려면이 줄을 추가하십시오 AssemblyInfo.cs(솔루션 탐색기의 속성에서 찾을 수 있음)

[assembly:CLSCompliant(true)]

또는 VB.NET에서 동등하게 ( AssemblyInfo.vb내 프로젝트 아래에 숨겨져 있습니다)

<Assembly: CLSCompliant(True)>

코드 CLS를 준수 하도록 만들어 주셔서 감사합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.