CLS specifica un insieme minimo di caratteristiche linguistiche necessarie da molte applicazioni in modo tale che se un API utilizza solo quelle caratteristiche, può essere consumato da qualsiasi linguaggio conforme a CLS. Quindi, naturalmente, è più restrittivo del CLR. D'altra parte, CLR è progettato per gestire il codice manged da qualsiasi linguaggio conforme alla CLI.
Un esempio di linguaggio che consente di lanciare eccezioni non conformi a CLS (quelle non derivate da System.Exception) è C++/CLI. Questo linguaggio è stato progettato per essere un superset di semplice C++ che include la possibilità di generare eccezioni di qualsiasi tipo. Questa potrebbe essere l'unica buona ragione per generare eccezioni non CLS.
Riguardo alla seconda domanda. Un'eccezione non CLS, quando generata, diverse cose accadono in diversi casi:
Modifica
In C#, nel primo proiettile sopra e il secondo caso del secondo proiettile, l'unico modo per catturare un'eccezione non-CLS è quello di utilizzare un fermo senza parametri bloccare.
fonte
2015-05-20 22:39:50
down-voting dovrebbe essere vietato – MatteoSp
La regola CLS esiste in modo che le eccezioni generate dal codice scritto in una lingua possano essere ragionevolmente catturate dal codice scritto in un altro. Le specifiche CLI non escludono la possibilità che * possa * essere utile in qualche tipo di linguaggio oscuro per lanciare qualcos'altro. Sicuramente avrai difficoltà a trovare un esempio di tale lingua. Quello che succede è in qualche modo ovvio, il programma si blocca senza alcun modo di rilevare o diagnosticare l'eccezione. –
Quindi non è così ovvio, giusto? – MatteoSp