2009-12-01 5 views
50

CLS 준수에 대한 많은 페이지를 발견했습니다.CLS 호환 코드를 작성해야하는 이유는 무엇입니까?

내가 이해 한 CLS 준수한다 :

많은 peolple "는 코드를 작성하는 경우, 당신이 그것을 준수 CLS 작성해야한다."고 쓰기 그러나 읽을 수있는 한, 일반 소프트웨어에서 CLS 규격을 사용할 이유가 없습니다.

맞나요? 아니면 뭔가 놓쳤습니까?

+0

관련 https://stackoverflow.com/questions/570452/what-is-the-clscompliant-attribute-in-net –

답변

41

라이브러리 또는 프레임 워크를 작성하는 경우 모든 CLR 언어에서 라이브러리를 사용할 수 있는지 확인하는 것이 좋습니다.

+0

CIL (Common Intermediate Language)이 충분하지 않습니까? – Luca

+4

afaik no, CIL에는 특정 CLR 언어에서 사용할 수없는 기능이 포함되어있을 수 있습니다. 예 : UInt32 매개 변수를 사용하는 메서드가 있지만 CIL 코드는 문제가 없지만 서명되지 않은 개념이없는 언어에서 메서드를 호출 할 수는 없습니다. –

+0

언어는 CIL (물론 원시 코드를 가지고있는)에서 "번역"됩니까? 이 시나리오에서는 레거시 어셈블리에서만 CLS 준수가 필요합니다. 맞습니까? – Luca

11

는 코드가 CLS를 준수해야하는 특정 이유가되지 않을 수도 있습니다,하지만 사람들은 "모범 사례"를되고 그것을 언급하는 - 오히려 잴 것보다, 좋은 습관 때문에 당신이해야 할 일을 특정 시나리오에 더 좋습니다. 즉

, 당신이 이유 하지에 있으면 않는 코드의 CLS를 준수하도록하는 것이 좋습니다입니다.

10

대답은 .NET 언어 간의 호환성을 극대화하는 것입니다. CLS는 F #, Iron Python, C++/CLI, VB.NET, Boo 및 기타 모든 .NET 언어와 함께 작동하도록 C# 어셈블리를 허용하는 링글 프랑크입니다. 경계 밖으로 벗어나서 조립품이 올바르게 작동 할 수는 있지만 반드시 그런 것은 아닙니다.

32

CLS 준수는 특히 라이브러리를 배포 할 때 특히 중요합니다. 특히 CLS 규격을 준수하면 모든 CLS 호환 언어에서 라이브러리를 사용할 수 있습니다.

예를 들어 Visual Basic은 대소 문자를 구분하지 않지만 C#은 대소 문자를 구분하지 않습니다. CLS 준수의 요구 사항 중 하나는 공용 (및 보호 된) 멤버 이름이 대/소문자 만 다른 경우가 아니므로 Visual Basic 코드 또는 .NET 기반 언어를 기반으로 차별화되지 않는 다른 .NET 언어로 라이브러리를 안전하게 사용할 수 있는지 확인해야합니다. 케이스.

+0

또한 밑줄이있는 멤버를 시작할 수 없다는 규칙이 있습니다. 어느 날 공공 재산에 의해 포장되는 보호 변수의 이름을 궁금해하게 ... 소문자 버전을 사용할 수 없으며 밑줄을 사용할 수 없습니다 ... 다음 추악한 대안은 무엇입니까? –

+0

아마 접두어로 p. 훌륭하지는 않지만 기능적입니다. 자바 스타일의 getter와 setter보다 C# Properties를 선호하는 반면 적어도 Java에서는 명명 규칙이 더 쉽습니다. – Dathan

+0

어쨌든 모든 것이 끝났을 때 자바는 더 간결 해집니다. 그래도 아마 언어보다는 도서관 일 것 같아. –

관련 문제