由于void
签名用于表示方法不返回任何内容,这种方法,我按以下方式编写:
private void MyMethod()
{
// Body of the method.
}
但是,在很多地方我都看到了不打算返回任何内容的方法,用以下方式编写:
private object MyMethod()
{
// Body of the method
return null;
}
从我的观点来看,两个代码都是一样的。那么,这可能是使用第二个的目的?他们之间有什么区别?他们中的任何一个都比另一个更受欢迎吗?
答案 0 :(得分:7)
第二个按原样编写,单次返回通常是无用的,它会稍微降低性能并使API更难消耗。然而,它可能有用,例如:
有多个返回点,这是最后一个表示缺少对象的返回点。例如,您可能正常返回对象的实例,但由于某种原因,这次您没有一个实例。 (例1)
如果方法标记不同,请说public virtual
,那么默认实现或被覆盖的实现可能不会返回值,但其他人可能会返回。 (例2)
示例1:
public object MyMethod()
{
if(myObj != null)
return myObj.Result();
return null;
}
示例2:
// Derived Class
protected override object MyMethod()
{
// We don't need a result from here so we don't have an implementation of
// anything, but the base implementation doesn't make sense. This however
// could be breaking SOLID principles.
return null;
}
// Base Class
protected virtual object MyMethod()
{
return new MyObj();
}
答案 1 :(得分:1)
也许第二个可以用来调用异常处理
答案 2 :(得分:0)
对于第二个,调用者可以测试null
ness,这是成功或失败的有用指示,如果由于某种原因,不希望抛出异常。第一个没有这样的设施。
答案 3 :(得分:0)
其次是误导。使用你的类的人会在执行这个方法后得到一些东西。如果他们在任何情况下都不打算返回有意义的值,你应该避免编写这样的方法。
即使你覆盖返回有意义的类的类,你也应该考虑使用NullObject设计模式,这样你就不会破坏现有的API并遵循LSP。返回null会使用额外的空检查逻辑创建冗余,并且是违反直觉的。
答案 4 :(得分:0)
第二个是不好的做法。我们没有必要告诉编译器检查返回类型。也许这是为了未来的变化。
答案 5 :(得分:0)
对于第二个,如果方法体中没有其他返回值,我会说它没用。只要您保证方法不会返回任何值,请使用第一个。
答案 6 :(得分:0)
第二种方法本身在你的情况下返回一些null。我觉得它不是非值返回方法。如果方法没有更好地返回到使用void
练习答案 7 :(得分:0)
唯一好的做法是每次返回一个bool值,以确认方法是否已成功接收到调用和参数,或者方法是否成功执行了内部逻辑。
返回NULL
是无用的,误导性的......