我经常拥有调用层次结构,因为所有方法都需要相同的参数。如果我不想将它们放在实例级别(类的成员),那么我总是问我是否有意义在每种方法中检查它们的有效性。函数中的重复参数检查
例如:
public void MethodA(object o){
if(null == o){
throw new ArgumentNullException("o");
}
// Do some thing unrelated to o
MethodB(o);
// Do some thing unrelated to o
}
public void MethodB(object o){
if(null == o){
throw new ArgumentNullException("o");
}
// Do something with o
}
如果Method
A使用的参数,那么它的清晰,我必须有,并检查有效性MethdoB。但是,只要MethodA没有更多地使用o
而不是MethodB
,在MethodA
中检查有效性也是一种好的做法。
在MethodA
也检查的优势可能是异常抛出被调用者调用的方法,这很好,但它是否有必要?调用堆栈也会说明这一点。也许它的意义在公共,内部,受保护但不是私人方法?
我以空检查为例,但索引验证或范围验证属于自我问题,但我认为由于冗余代码的危险而存在限制。你怎么看?
UPDATE
通过我已经看到了,我是有点精确AakashM的答案。 MethodA
不仅呼叫MethodB
,它也做其他事情,但不涉及o
。我添加了一个例子来澄清这一点。谢谢AakashM。
产生输入值的地方 - 在调用者意味着什么?我想要写我的例子的例子是,方法A和B都可以从类的外部访问,并且它的合法调用其中的一个(MethodA执行相同,比MethodB稍微多一点) – HCL 2010-07-14 11:01:53
是的。看我的编辑。 – Mau 2010-07-14 11:21:16