Pergunta

Atualmente, estou lendo Albahari 's C # 3.0 em um Nutshell e na pág. 241, enquanto falando de indexação Array, ele diz o seguinte:

matrizes baseadas em Nonzero não são CLS (Common Language Specification)-compatível

O que significa exatamente, para matrizes diferentes de zero a não ser compatível com CLS ? E que implicações isso tem sobre o seu código?

[Update]

Aqui é um link para a página do livro.

Foi útil?

Solução

Os CLS (Common Language Specification) estabelece as bases para um conjunto comum de regras para o cumprimento que garante que outras línguas (VB.NET, F #, etc.) pode usar conjuntos que você construiu com C #. Uma matriz baseada em zero não seria compatível como outros idiomas esperar matrizes para ser baseada em zero.

Aqui está um exemplo de que é mais fácil de entender:

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

Este tipo seria não ser compatível com CLS, uma vez que contém dois membros que diferem apenas no nome, por tipo. Como é que alguém usando VB.NET disambiguate entre Bar e bar desde o compilador VB.NET não é case-sensitive?

Então, basicamente, o CLS é um monte de regras como essa para garantir a interoperabilidade entre os idiomas.

Outras dicas

cumprimento

CLS é principalmente sobre certificando-se de que seu código é tão amplamente compatível com outras línguas quanto possível. Ele inclui coisas como não expor membros públicos que diferem apenas por caso (que iria confundir VB, que é case-insensitive). Veja este MSDN artigo para mais informações, juntamente com o especificação de linguagem comum si.

I além do que tem sido dito, existem matrizes à base diferentes de zero apenas para facilitar a transição para o código VB6 (principalmente pela ferramenta de migração automática) existente uma vez que em VB6, a indexação de matriz poderia começar a partir de um número arbitrário, não necessariamente zero.

Devido ao problema de compatibilidade CLS (e outras considerações), não é recomendado para nunca usá-los em .NET (mesmo quando a programação VB.NET). Além disso, a sua utilização é bastante restrita. É mais fácil apenas para fazer uma tradução compensado por encapsular a matriz dentro de uma classe e escrever um operador de acesso de índice apropriado.

Além disso,

Se a sua aplicação não se destina a trabalhar com outros programas -. Como em é uma unidade auto-suficiente que você não vai vender como uma biblioteca de classe pública para outras pessoas, não se preocupe muito sobre isso

Mas os outros comentários aqui são corretas ao desenvolver uma biblioteca de classe genérica.

É sempre uma boa prática para uso. [Assembly: CLSCompliant (true)], mas não é fundamental para obter o aplicativo em execução

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top