在C#编程中,异常处理是确保程序稳健性和可靠性的重要手段。虽然C#提供了丰富的内置异常类型,但在实际开发中,我们常常需要根据具体的业务逻辑创建自定义异常类,以提供更有意义的错误信息,方便调试和维护。本文将深入探讨C#中的自定义异常类,了解其应用特点,探讨其在不同场景下的应用,并通过多个示例展示如何在实际编程中有效使用自定义异常类。
在业务逻辑处理中,可能会出现一些特定的异常情况。例如,订单数量为负数、用户名重复等。通过自定义异常类,可以清晰地表示这些异常,便于调用者进行针对性的处理。
示例:订单数量异常
C#namespace App01
{
// 自定义异常类
public class OrderQuantityException : Exception
{
public int InvalidQuantity { get; set; }
public OrderQuantityException() { }
public OrderQuantityException(string message) : base(message) { }
public OrderQuantityException(string message, int quantity) : base(message)
{
InvalidQuantity = quantity;
}
public OrderQuantityException(string message, Exception innerException) : base(message, innerException) { }
}
internal class Program
{
static void Main(string[] args)
{
try
{
CheckOrderQuantity(-5);
}
catch (OrderQuantityException ex)
{
Console.WriteLine($"捕获到异常:{ex.Message}");
Console.WriteLine($"非法的订单数量:{ex.InvalidQuantity}");
}
}
// 检查订单数量的方法
private static void CheckOrderQuantity(int quantity)
{
if (quantity < 0)
{
throw new OrderQuantityException("订单数量不能为负数。", quantity);
}
else if (quantity == 0)
{
throw new OrderQuantityException("订单数量不能为零。", quantity);
}
// 继续处理订单
}
}
}
Exception
**或其子类:自定义异常类应直接或间接继承自System.Exception
类,以便于异常机制的正常运作。完整示例:
C#[Serializable]
public class CustomException : Exception
{
public string AdditionalInfo { get; set; }
public CustomException() { }
public CustomException(string message) : base(message) { }
public CustomException(string message, string additionalInfo) : base(message)
{
AdditionalInfo = additionalInfo;
}
public CustomException(string message, Exception innerException) : base(message, innerException) { }
protected CustomException(SerializationInfo info, StreamingContext context) : base(info, context)
{
AdditionalInfo = info.GetString("AdditionalInfo");
}
// 重写GetObjectData方法,支持序列化
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("AdditionalInfo", AdditionalInfo);
base.GetObjectData(info, context);
}
}
示例:异常捕获层次结构
C#try
{
// 可能抛出异常的代码
}
catch (OrderQuantityException ex)
{
// 处理订单数量异常
}
catch (DataAccessException ex)
{
// 处理数据访问异常
}
catch (Exception ex)
{
// 处理其他异常
}
在本文中,我们深入探讨了C#中的自定义异常类,了解了其应用特点和适用场景,并通过详细的示例展示了如何定义和使用自定义异常类。自定义异常类是提升程序健壮性和可维护性的有力工具,合理使用可以为程序提供更丰富的错误信息,方便调试和异常处理。
在实际开发中,应根据具体的业务需求和异常处理需求,合理地设计和使用自定义异常类,遵循编码规范和最佳实践,从而编写出高质量的代码。
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!