Методы: передача аргумента по ссылке

В C# по умолчанию в методы аргументы передаются по значению (т.е. информация из вне копируется внутрь метода). Если есть необходимость передать аргумент по ссылке, чтобы после применения метода значение передаваемого аргумента менялось не только внутри метода, но и за его пределами, есть специальное слово ref. В коде это выглядит так:

static void Sqr(ref int x) {
  x = x * x;
  }

static void Main() {
  int a = 3;
  Sqr(ref a);

  Console.WriteLine(a);
  }

// будет выведено 9

При использовании ref переменной должно быть присвоено значение до инициализации метода.

Если нужно без присвоения до инициализации, используем out.