当前位置: 首页 > 编程语言 > C#

CLR会处理CLS-Complaint和non-CLScomplaint异常吗?分享

时间:2023-04-10 23:38:40 C#

CLR会处理CLS-Complaint和非CLS投诉的异常吗?只是为了澄清一下:我可以在.NETFramework中抛出CLS-Complaint和非CLS-Complaint异常吗?我正在使用C#3.0。当我捕获异常时catch(Exceptionex){}是的,您可以在.NETFramework中抛出不符合CLS的异常,只要您使用允许它的语言,例如C++。不,您不能在C#中抛出不符合CLS的异常。不,它会捕获所有异常,因为任何不符合CLS的异常都将包装在派生自Exception的RuntimeWrappedException中。您不会抛出RuntimeWrappedException、CLRRuntimeWrappedException。MSDN有详细的描述,我在这里引用:有些语言(比如C++)允许你抛出任何托管类型的异常。其他语言(例如MicrosoftC#和VisualBasic)要求每个抛出的异常都派生自Exception类。为了保持语言之间的兼容性,公共语言运行时(CLR)将不是从Exception派生的对象包装在RuntimeWrappedException对象中。如果您想以不同方式处理CLS和非CLS异常,只需按正确的顺序捕获它们:try{//somecodecatch(RuntimeWrappedExceptionex){//非CLS异常catch(Exceptionex){//CLS异常}尽管C#编译器只允许开发人员在C#2.0之前抛出异常派生对象,但C#编译器确实允许开发人员使用如下代码捕获不符合CLS的异常:privatevoidSomeMethod(){try{//在try块中,您可以放置??需要优雅恢复或常见清理操作的代码。}catch(Exceptione){//在C#2.0之前,此块仅捕获符合CLS的异常//在C#2.0中,此块捕获符合CLS和不符合CLS的异常throw;//重新抛出捕获到的任何内容}catch{//在所有版本的C#中,此块捕获//CLS和非CLS兼容的异常throw;//Re-throwswhatevergotcatched}}CLS允许但不是所有语言。用C++/CLI可以做到,用C#、VB.NET做不了。从.NetFramework2.0开始,所有非CLS异常都包装在RuntimeWrappedException中。由于RuntimeWrappedException派生自Exception,因此catch(Exception)将捕获非CLS异常。从RuntimeWrappedException中,您可以通过RuntimeWrappedException.WrappedException属性访问原始异常。以上是C#学习教程:WilltheCLRhandleCLS-Complaintandnon-CLScomplaintexceptions?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: