2016-09-08 3 views
3

Я хочу спросить, есть ли какая-то разница междуИспользования [в, из] в методах

public int Method1([In, Out] byte[] buffer); 

и

public int Method2(byte[] buffer); 

я наткнулся на http://referencesource.microsoft.com/#mscorlib/system/io/stream.cs,739 и удивляюсь, почему [In, Out] там?

+2

Этот код очень, очень старый и почти наверняка написан до того, как был сделан маршаллер. Это заняло довольно много времени, они потратили огромные средства на его оптимизацию. Достойные шансы на то, что [Out] был необходим, когда маркерщик pinvoke еще не мог обработать blittable типы. Или программист просто включил его, потому что никогда не ошибается, чтобы быть явным. Вам нужно будет найти программиста Microsoft, который работал над этим 17 лет назад, чтобы получить полностью надежный ответ. Их очень сложно найти. –

ответ

-1

Да. Есть различия.

  • public int Method2(byte[] buffer); использует неявное In:

    Указывает, что данные должны быть выстраивали от вызывающего к вызываемому абоненту, но не обратно к абоненту.

  • public int Method2(out byte[] buffer); использует Out:

    Указывает, что данные должны быть выстраивали от вызываемым обратно абоненту.

  • public int Method2(ref byte[] buffer); использует [In, Out].
+2

Нет, они не эквивалентны. Использование '[In, Out]' не заменяет использование 'ref'. –

+0

@reproduktor не могли бы вы объяснить? – Ondrej

+0

Согласно [msdn] (https://msdn.microsoft.com/en-us/library/77e6taeh (v = vs.100) .aspx) 'ref' переводит на' [in/out] '. – Ondrej

Смежные вопросы