Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果仅部分支持方法参数,则在接口实现中引发异常_C#_Exception_Interface - Fatal编程技术网

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
,因为接口的存在是为了给调用方信心,方法是根据约定实施的

您应该实施接口隔离原则,基于硬件系统

  • 如果参数不合适,则四舍五入到4,或者降到1000,-/strong>您不应该这样做。您的客户希望他在一分钟内进行操作,但使用这种方法,他只会在一秒钟内进行操作。如果你不能遵守合同,那么你至少应该遵守,否则系统可能会出人意料
  • 如果时间介于4到1000之间,但TotalMillicles属性是分数,则可以舍入为整毫秒吗?-视情况而定。同意,最有可能的损失或增加,比如说,半毫秒时间对大多数系统来说并不重要,但从另一方面来说,理论上讲,它可以用于每纳秒都很重要的一些系统
  • 不支持异常
    ArgumentOutOfRangeException
    • ArgumentOutOfRangeException
      -假设客户端无法检查该参数的有效值,则将违反。但是如果您提供了一些额外的方法,比如
      boolisvalid(TimeSpan)
      ,那么这个问题就不适用了,因为这样的接口假设客户端使用
      IsValid
      检查参数
    • NotSupportedException
      -表示“当调用的方法不受支持时,或当试图读取、查找或写入不支持调用的功能的流时引发的异常”。它似乎非常适合于由于实施限制而无法完成某些特定操作的情况。像这样的案子。我只是建议例外。您甚至可以使用
      ArgumentOutOfRangeException
      作为
      NotSupportedException
      ,以充分利用这两种异常类型
  • 1) 这种向上或向下的舍入很容易导致不可预测的行为。您现在已经熟悉了这个副作用,您甚至可以在方法描述中写一些关于它的信息,但是这降低了代码的可读性,将来可能会使用此代码的人可能会惊讶于他提供的论点完全改变了。尽量避免这种副作用,这不是必要的

    2) 这取决于具体情况,但在大多数情况下,这种四舍五入就可以了。必须考虑解决某些涉及很短时间的方法。请注意,例如.NET

    DateTime.Now
    

    具有特定于系统的分辨率,通常不小于10ms。

    感谢您的意见和有用的链接。我决定在案例1和案例2中抛出一个
    NotSupportedException
    ,以避免对客户机进行控制。我给了它一个有意义的消息。谢谢你对
    DateTime.Now
    行为的提示!