2009-02-20 8 views

risposta

153

Contrassegnate le classi con l'attributo CLSCompliant quando volete assicurarvi che possa essere utilizzato da qualsiasi altro linguaggio .NET. Queste sono le regole di base:

  1. tipi Unsigned non dovrebbero essere parte dell'interfaccia pubblica della classe. Ciò significa che i campi pubblici non dovrebbero avere tipi non firmati come uint o ulong, i metodi pubblici non dovrebbero restituire tipi non firmati, i parametri passati alla funzione pubblica non dovrebbero avere tipi non firmati. Tuttavia, i tipi non firmati possono far parte di membri privati.

  2. I tipi non sicuri come i puntatori non devono essere utilizzati con membri pubblici. Tuttavia possono essere utilizzati con membri privati.

  3. I nomi delle classi e dei nomi dei membri non devono differire solo in base al loro caso. Ad esempio, non possiamo avere due metodi denominati MyMethod e MYMETHOD.

  4. Solo le proprietà e i metodi possono essere sovraccaricati, gli operatori non devono essere sovraccaricati.

+0

Lo faresti come predefinito per ogni progetto? –

+2

Non necessariamente, soprattutto per quelli che potrebbero avere esposizione ad altre lingue .net. –

11

CLS compatibile è un sottoinsieme dell'intero spettro linguistico consentito dal CLR. Lo limita ai sottoinsiemi che sono probabilmente disponibili dalla maggior parte delle lingue che hanno come target il CLR. Ciò aumenta, ma non garantisce, che la tua libreria possa essere utilizzata da tutte le lingue che hanno come target il CLR.

42

Segnala agli altri utenti del codice che è CLS compliant e rende anche il compilatore C# controllare che è compatibile con CLS.

L'articolo di riferimento contiene molti più dettagli su ciò che la conformità CLS comporta.

+11

Quindi, se aggiungo l'attributo e poi costruisco il mio progetto senza lamentele, ciò significa che il mio progetto è conforme a CLS e tutto è buono? – Svish

34

Le altre risposte sono corrette. Permettetemi di chiarire alcune cose: CLS sta per Common Language Specification. È il set minimo di regole e le funzionalità linguistiche richieste che un linguaggio .NET deve implementare e comprendere. Questo set è un sottoinsieme di common type system, che definisce come vengono definiti i tipi in .NET.

Essendo conforme CLS significa che è possibile scrivere codice che può essere utilizzato da qualsiasi linguaggio che può essere compilato ed eseguito sul CLR. Ma la conformità CLS non è richiesta, offrendoti la flessibilità nei casi in cui la conformità CLS sarebbe difficile o impossibile da fare.

Se si intende che il codice venga utilizzato da altri sviluppatori, l'API (le classi e i metodi pubblici) devono essere conformi a CLS. È necessario dichiararlo aggiungendo CLSCompliantAttribute ai propri assembly. Se non si sta scrivendo per gli altri, la conformità CLS non è necessaria, anche se FxCop (Quadro poliziotto) non sarebbe d'accordo con me.

Quando il montaggio è contrassegnato con il CLSCompliantAttribute, il compilatore (dovrebbe!) Controllare il codice per vedere se, quando compilato, sarà violare una delle regole CLS (alcuni dei quali ocdecio menzionato) e segnalare le violazioni a te per il fissaggio.

+0

FxCop mi ha portato qui. –

6

Come si adatta qui: Per contrassegnare un intero compatibile con CLS progetto aggiungere questa linea al AssemblyInfo.cs (si trovano sotto Proprietà in Esplora soluzioni)

[assembly:CLSCompliant(true)] 

o equivalentemente in VB.NET (AssemblyInfo.vb è nascosto sotto la Mia Progetto)

<Assembly: CLSCompliant(True)> 

Grazie a Making Your Code CLS Compliant.