Come autore di una libreria OSS, ho sempre cercato di rendere CLS compatibile. Ma MS non lo rende facile. Spesso ti mettono in situazioni di catch-22, come ad esempio:Limitazioni pratiche con assiemi non contrassegnati come conformi a CLS?
- Non è possibile avere una variabile protetta che differisce solo nel caso della proprietà pubblica.
- Non è possibile avere variabili protette o pubbliche che iniziano con un carattere di sottolineatura o "m_".
- Se si desidera rendere una classe realmente estendibile, è spesso necessario avere variabili protette che corrispondono alle proprietà pubbliche. La tua uscita meno brutta è quella di aggiungere un suffisso alla variabile, come "Var" o "Valore". È brutto e inaccettabile per me. Mi piace il codice pulito.
Non conosco linguaggi .NET che non supportano variabili che iniziano in un carattere di sottolineatura, e li ho usati in molti posti in cui la variabile deve essere visibile alle sottoclassi.
Sono stanco degli avvertimenti e sto pianificando di disattivare la conformità CLS a livello di assembly sulle mie librerie 30+ C#.
Sono presenti problemi effettivi con la disattivazione della conformità CLS nelle librerie? Qualsiasi reale problemi con questo?
Microsoft ha rilasciato una guida unheedable sul software per decenni, con meno del 5% di esso che è valsa la pena di byte è stato codificato in. Non riesco a trovare alcuna prova che questo migliori pratiche ha alcun effetto reale su qualsiasi cosa.
Ma, per fare attenzione, sto controllando.
E no, questo non è un duplicato del inverso di questa domanda: Any reason not to mark a DLL as CLSCompliant?
Sto cercando i risultati effettivi e gli effetti qui, non il consiglio di un tirocinante MS.
Ad esempio, se IronPython, IronRuby o F # non sono in grado di leggere o scrivere una variabile che inizia con un carattere di sottolineatura, questo è un effetto, anche se causerebbe solo un problema per gli utenti che suddividono determinati oggetti.
Se un linguaggio o uno strumento non è completamente in grado di utilizzare un assembly a meno che non sia contrassegnato come conforme a CLS, ora è un grosso problema.
-1. Nessuno dei casi che date come esempio ha senso. – TomTom
@TomTom: sono d'accordo, quindi la mia risposta è la seguente, ma continuo a pensare che la domanda di per sé sia valida. Esistono altri casi validi che impediscono la conformità CLS. Un esempio di un mio attuale progetto: il nome del progetto è REM. Lo spazio dei nomi di root di tutti i progetti nella soluzione è 'Rem'. Poiché REM è una parola chiave riservata in alcune lingue, ciò impedisce la conformità CLS. –
Sì. IO sono solo un grande fan del fare un caso PROPRETAMENTE o di essere deriso. L'OP aveva tutto il tempo che il mondo si sedesse e tirasse fuori un caso sensato. – TomTom