C# 如果仅部分支持方法参数,则在接口实现中引发异常
我有一个接口,让我们用唯一的方法称它为C# 如果仅部分支持方法参数,则在接口实现中引发异常,c#,exception,interface,C#,Exception,Interface,我有一个接口,让我们用唯一的方法称它为ioOperation void Operate(TimeSpan time); 我的一个实现是由于硬件限制,只能处理4毫秒到1000毫秒之间的完整毫秒 1) 如果有人在时间小于4或大于1000的情况下调用该方法,我是否应该抛出异常?如果是,是不支持异常还是ArgumentOutOfRangeException更好?或者,如果参数不合适,则四舍五入至4或下至1000 2) 如果时间介于4和1000之间,但TotalMillistics属性为小数,则可以将其
ioOperation
void Operate(TimeSpan time);
我的一个实现是由于硬件限制,只能处理4毫秒到1000毫秒之间的完整毫秒
1) 如果有人在时间小于4或大于1000的情况下调用该方法,我是否应该抛出异常?如果是,是不支持异常
还是ArgumentOutOfRangeException
更好?或者,如果参数不合适,则四舍五入至4或下至1000
2) 如果时间介于4和1000之间,但TotalMillistics属性为小数,则可以将其四舍五入为整毫秒吗?或者抛出异常
我最喜欢的方法是在这两种情况下都抛出一个NotSupportedException
,因为根据接口,参数不是无效的,因此ArgumentOutOfRangeException
似乎不适合imho
此外,内部舍入似乎在某种程度上超过了来电者,而没有通知他。另一方面,我对没有完全履行接口约定感到遗憾,调用方应该如何应对我的
NotSupportedExceptions
,因为接口的存在是为了给调用方信心,方法是根据约定实施的您应该实施接口隔离原则,基于硬件系统
不支持异常
或ArgumentOutOfRangeException
-假设客户端无法检查该参数的有效值,则将违反。但是如果您提供了一些额外的方法,比如ArgumentOutOfRangeException
,那么这个问题就不适用了,因为这样的接口假设客户端使用boolisvalid(TimeSpan)
检查参数IsValid
-表示“当调用的方法不受支持时,或当试图读取、查找或写入不支持调用的功能的流时引发的异常”。它似乎非常适合于由于实施限制而无法完成某些特定操作的情况。像这样的案子。我只是建议例外。您甚至可以使用NotSupportedException
作为ArgumentOutOfRangeException
,以充分利用这两种异常类型NotSupportedException
DateTime.Now
具有特定于系统的分辨率,通常不小于10ms。感谢您的意见和有用的链接。我决定在案例1和案例2中抛出一个
NotSupportedException
,以避免对客户机进行控制。我给了它一个有意义的消息。谢谢你对DateTime.Now
行为的提示!