25 de out. de 2004

O que é conformidade CLS?

Lendo hoje a thread "VS.NET vs. Delphi8.NET" no ng borland.public.delphi.language.delphi.dotnet, encontrei a seguinte afirmação:

Both languages [C# and Delphi] contain non-CLS compliant structures, it's up to you to decide if you want to use'm
Essa afirmação gerou a seguinte dúvida: o que é a não-conformidade e em quais pontos exatamente C# é não-conforme com a CLS? O significado de um item ser não-conforme é que tal item é um recurso exclusivo de uma determinada implementação do CLS. O resultado é que um não-conforme de uma classe implementada em uma determina linguagem baseada no CLS pode não ser portável para uma implementação em uma outra linguagem baseada no CLS. Esse problema de portabilidade pode ser detectado marcando a classe (ou o assembly, ou o método, etc) com o atributo CLSCompliant(true), o que gerará um erro de compilação. Note que a questão da conformidade afeta apenas itens públicos de uma classe (ou assembly, ou método, etc); internamente, uma classe pode usar livremente itens não-conformes. Segundo a própria introdução às classes do framework .NET, os seguintes tipos de dados da linguagem C# não estão em conformidade com a CLS:
  • sbyte
  • ushort
  • uint
  • ulong
  • UIntPtr
Para mais detalhes, veja Writing CLS-Compliant Code no MSDN.

Nenhum comentário: