Массивы в .Net являются ссылочными типами.
Следовательно, ваша функция получает ссылку на объект массива по значению. Поскольку все еще существует только один экземпляр массива, функция может изменить экземпляр, и изменения будут видны вызывающей стороне.
Добавление ключевого слова ref
заставит функцию получить ссылку на объект массива по ссылке и, следовательно, позволит функции изменить ссылку для ссылки на другой экземпляр массива.
Другими словами, ключевое слово ref
позволит вам написать следующее:
public static void WriteInt(int i, ref byte[] byte_array, int pos)
{
byte_array = new byte[0]; //In the caller, the array will now be empty.
}
Для демонстрации:
void SetReference(ref byte[] arrayRef) { arrayRef = new byte[1]; }
void SetValue(byte[] arrayVal) { arrayVal[1] = 42; }
byte[] array = new byte[4];
byte[] sameArray = array; //sameArray refers to the same instance
sameArray[0] = 77; //Since it's the same instance, array[4] is also 77.
SetValue(array); //array[1] is 42.
//Since it refers to the same array, sameArray[1] is also 42.
SetReference(ref array); //sameArray now refers to a new array of length 1.
//array still refers to the original array.