2010-08-13 19 views

risposta

41

Nel file AssemblyInfo.cs, probabilmente si sono una linea che legge

[assembly:CLSCompliant(true)] 

Se lo fai, allora le seguenti regole devono essere rispettate. (Copy-Paste da http://www.devarticles.com/c/a/C-Sharp/Making-Your-Code-CLS-Compliant/)

  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

I tipi non firmati possono far parte di un'interfaccia pubblica, se non espongono alcuna funzionalità che il codice scritto in una lingua senza tipi non firmati potrebbe voler utilizzare ma non essere in grado di farlo.Ad esempio, un metodo per memorizzare un valore senza segno a 32 bit in quattro byte consecutivi potrebbe legittimamente contenere sovraccarichi sia per 'UInt32' che per' Int64', e una classe potrebbe fornire un metodo per convertire quattro byte consecutivi in ​​'UInt32' se anche fornito uno che restituirebbe lo stesso valore di un 'Int64'. – supercat

5

Questa è una vecchia domanda, ma ho pensato che una spiegazione migliore fosse dovuta per i futuri investigatori (come me).

Prima di tutto, i collegamenti nelle altre risposte forniscono dettagli dettagliati sul motivo per cui viene fornito questo avviso.

Tuttavia, per riepilogare, il codice scritto per Common Language Runtime (come C#) è compatibile con CLS se può interfacciarsi con altri linguaggi progettati per CLR. Ciò significa che determinati tipi di dati specifici della lingua che non sono comuni all'intero runtime non sono conformi. La soluzione rapida e semplice per quanto riguarda variabili e metodi è di dare loro il modificatore di visibilità internal che specifica che il metodo, la classe, la proprietà, ecc. Non è visibile al di fuori dell'assieme per cui è stato costruito. Questo dovrebbe essere fatto solo su quegli articoli che non ti servono o che vuoi usare al di fuori dell'assemblaggio; per quelli che vuoi vedere, usa tipi di dati che sono compatibili con CLS.

Problemi correlati