8
votes

Le CLR répondra-t-il à la fois des exceptions de plainte CLS-Plainte et des non-CLS?

Juste pour ma clarification:

Puis-je jeter les exceptions de plainte CLS-plainte et non-CLS dans .NET Framework? .Je suis en train d'utiliser C # 3.0. P>

Quand j'atteindra une exception p >

catch(Exception ex)
{

}
  • ne attrapera-t-il que des exceptions de plainte CLS ?. li>
  • Quelle est l'utilisation de la classe RuntimewrapaStionException (puis-je avoir un exemple simple?). li> ul> p>


0 commentaires

3 Réponses :


13
votes
  1. Oui, vous pouvez jeter des exceptions confidentielles non-CLS dans la structure .NET, tant que vous utilisez une langue qui le permet, par ex. C ++. LI>
  2. Non, vous ne pouvez pas jeter des exceptions non conformes aux non-CLS en C #. Li>
  3. Non, il va attraper toutes les exceptions, car toute exception conforme non CLS sera enveloppée dans un RunTimewrapaSexception code>, qui dérive de exception code>. li>.
  4. Vous ne jetez pas un runtimewrapaSexception code>, le CLR fait. MSDN a une description détaillée que je cite ici: p>

    certaines langues, telles que C ++, vous permettent de lancer des exceptions de tout type géré. D'autres langues, telles que Microsoft C # et Visual Basic, exigent que chaque exception projetée soit dérivée de la classe d'exception. Pour maintenir la compatibilité entre les langues, les objets d'exécution de la langue commune (CLR) sont des objets qui ne découlent pas d'exception dans un objet RunTimewrapeExceptionException. EM> P> LI>

    Si vous souhaitez traiter des exceptions CLS et non-CLS différemment, attrapez-les dans le bon ordre: P>

    try {
        // some code
    catch(RuntimeWrappedException ex) {
        // non-CLS exceptions
    catch(Exception ex) {
        // CLS exceptions
    }
    


0 commentaires

2
votes

Bien que le compilateur C # permet aux développeurs de jeter des objets dérivés d'exception, avant de C # Version 2.0, le compilateur C # a permis aux développeurs d'attraper des exceptions non conformes à la CLS. En utilisant le code comme celui-ci: xxx


0 commentaires

1
votes

Le CLS le permet mais toutes les langues ne font pas. Il peut être fait avec C ++ / CLI mais il ne peut pas avec c #, vb.net.

À partir de .NET Framework 2.0, toutes les exceptions non CLS sont enveloppées à l'intérieur d'un RUNTIMEWRAPEDEXCEPTION .

Étant donné que RunTimewrapaPrappedException découle de l'exception, une prise (exception) attrapera des exceptions non CLS.

à partir d'une analyse RUNTIMEWRAPEFEXEXException Vous pouvez accéder à l'exception originale via RuntiMewrapaStionException.wravedException Propriété.


0 commentaires