[英]Pass by Reference vs Returning class instance
根据标题,将引用类型传递给方法有任何区别,例如:
public void GetStream(Stream outputStream)
{
outputStream.Write(data);
}
VS
public Stream GetStream()
{
MemoryStream ms = new MemoryStream();
ms.Write(data);
return ms;
}
我注意到很多Java代码都是按引用传递类的(不确定确切原因)。 但是在.NET中,这只是一个偏好问题?
您何时会选择一个?
两者有很大的不同。 在您的第一个示例中,调用者负责创建流(他们喜欢的任何类型),并且可以传递已经定位在某个任意位置的流。
在第二个中,被调用方已确定流的类型,并且始终在位置0处书写。
如果你的第一个例子是:
public void GetStream(out stream outputStream)
{
outputStream = new MemoryStream();
outputStream.Write(data);
}
他们至少会更接近可比性。
这里,主要的区别是调用者必须有一个声明的变量来捕获outputStream
,而在另一种情况下,调用者可以忽略返回的流值。
然而,从第二(返回值)更常见的-如果一个方法有一个单一的值返回,这是迄今为止优选该值是由该方法返回,而不是一个void
与方法out
参数-主要是,在.NET中,应该谨慎使用out
参数(并且只有当方法的返回值已经有用时)。 这种方法的一个示例是各种类型的TryParse
方法,它们返回bool
(表示成功),并且将解析后的值作为out
参数传递回。
首先,“关注点分离”的概念建议称为“ GetStream”的方法也不应写入流中。 特别是当“bytes”不是传入的参数时。 这实际上是两个独立的函数,应该以这种方式进行编码。
但对于原始问题,通过引用传递只是意味着该方法可以选择修改对象的实例。 使用返回值返回新的或现有的引用是迈向编写不可变对象的一步,并且绝对值得考虑作为实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.