为什么Visual Studio要添加throw new NotImplementedException();而不是直接留空呢。
原因我想有2:
一个是对于那些有返回值的方法,如果什么都不写,会无法通过编译,VS不希望这样;
另一个原因是,NotImplementedException();可以表示真的没有实现这个方法。对于可以预见的调用者,它们可能真的只需要使用接口中的一些方法。因此完全没有必要实现所有的方法。NotImplementedException();保证了不实现某些方法,代码仍然合法,同时对调用的违例给出异常提示。
一个很经典的例子是,比如有一个叫鸟的接口,我们定义了下蛋、吃、飞行三个方法。
当我们实现一个鸵鸟的类的时候,如果非要在飞行中添加点代码,或者胡乱返回点什么,如2楼说的那样,并不是好的设计,因为这会让人产生迷惑。
因此直接在方法体内填入throw new NotImplementedException();是一个合理的设计。
类似地,我们设计一个方法,获得来自传感器的温度,用正数表示零上温度,用负数表示零下温度。一个不好的设计是,当传感器故障没有返回的时候返回0,或者某个值。这会导致调用者的迷惑,到底这是故障还是确实有这么一个温度呢。因此最好表示为异常。
去年的动车事故中,信号机没有正确获得信号,因为雷击导致供电中断了。信号机软件在无法获得信号的时候,会返回之前的信号,而不是报错,最终导致了事故。这说明对软件异常的处理必须非常谨慎。