.net的错误处理机制是什么?
.net错误处理机制采用 try->catch->finally 结构,发生错误时,层层上抛,直到找到匹配的Catch为止。
在c#中error和exception有什么区别?
Error(错误)表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题。比如:内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由Java虚拟机抛出的。
Exception(违例)表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。
Exception又分为运行时异常,受检查异常。
1)运行时异常:表示无法让程序恢复的异常,导致的原因通常是因为执行了错误的操作,建议终止程序,因此,编译器不检查这些异常。
2)受检查异常:是表示程序可以处理的异常,也即表示程序可以修复(由程序自己接受异常并且做出处理), 所以称之为受检查异常。
如何避免类型转换时的异常?
其中有些是确定可以转换的(比如将一个子类类型转为父类类型),而有些则是尝试性的(比如将基类引用的对象转换成子类)。当执行常识性转换时,我们就应该做好捕捉异常的准备。当一个不正确的类型转换发生时,会产生 InvalidCastException 异常,有时我们会用 try-catch 块做一些尝试性的类型转换,这样的代码没有任何错误,但是性能却相当糟糕,为什么呢?异常是一种耗费资源的机制,每当异常被抛出时,异常堆栈将会被建立,异常信息将被加载,而通常这些工作的成本相对较高,并且在尝试性类型转换时,这些信息都没有意义。在.NET 中提供了另外一种语法来进行尝试性的类型转换,那就是关键字 is 和as 所做的工作。
(1)is 只负责检查类型的兼容性,并返回结果:true 和 false。→ 进行类型判断两者的共同之处都在于:不会抛出异常!综上比较,as 较 is 在执行效率上会好一些,在实际开发中应该量才而用,在只进行类型判断的应用场景时,应该多使用 is 而不是 as。
public static void Main(string[] args)
{
object o = new object();
// 执行类型兼容性检查
if(o is ISample)
{
// 执行类型转换
ISample sample = (Isample)o;
sample.SampleShow();
}
Console.ReadKey();
}
(2)as 不仅负责检查兼容性还会进行类型转换,并返回结果,如果不兼容则返回 null 。→ 用于类型转型
public static void Main(string[] args)
{
object o = new object();
// 执行类型兼容性检查
ISample = o as Isample;
if(sample != null)
{
sample.SampleShow();
}
Console.ReadKey();
}
两者的共同之处都在于:不会抛出异常!综上比较,as 较 is 在执行效率上会好一些,在实际开发中应该量才而用,在只进行类型判断的应用场景时,应该多使用 is 而不是 as。
…
…
…