Два очень разные.В первом примере вызывающий абонент отвечает за создание потока (любого типа, который он предпочитает) и может передать поток, который уже расположен в некоторой произвольной позиции.
Во втором вызываемый объект определилтип потока и всегда записывает в позиции 0.
Если бы ваш первый пример был таким:
public void GetStream(out stream outputStream)
{
outputStream = new MemoryStream();
outputStream.Write(data);
}
, они были бы по крайней мере ближе к сопоставимым.
Здесь основное отличие состоит в том, что вызывающий имеет для того, чтобы иметь объявленную переменную для захвата outputStream
, тогда как в другом случае вызывающий может игнорировать возвращаемое значение потока.
Тем не менее, вторая из (возвращающая значение) встречается чаще - если у метода есть одно возвращаемое значение, гораздо предпочтительнее, чтобы это значение было , возвращаемым методомвместо метода void
с параметром out
- в большинстве случаев в .NET параметры out
следует использовать экономно (и только если возвращаемое значение из метода уже равно сомчто-нибудь полезное).Примером такого метода могут быть методы TryParse
для различных типов, которые возвращают bool
(указывает на успех), и проанализированное значение передается обратно как параметр out
.