层次结构违反Liskov - 那又怎样?

Aid*_*dan 7 c# inheritance liskov-substitution-principle

我正在使用违反Liskov替换原则的API:它抛出自己的Exception类型,扩展Exception,但将来自基类的异常消息放入新的ErrorCode字段中,并将自己的(无用的)消息放入Message字段中.因此,要显示正确的消息,我需要将Exception转换为DerivedException类型并使用ErrorCode字段.如果我将它视为异常对象,我会得到错误的消息.

现在这让我感觉很震撼,但是它很容易解决:我可以捕获DerivedException并将其用作程序员的预期.所以我的问题是:利斯科夫原则有什么大不了的?使用违反原则的层次结构,人们可能会遇到哪些实际问题?

C.E*_*uis 8

一个实际的例子:

如果你有一个带有方法的日志类,LogException(Exception ex)它会记录你认为无用的消息,而不是"真实"消息.

日志方法的描述将从"记录异常消息"更改为"记录异常消息,但有时会记录无用消息".