Аргументы могут быть переданы по значению и по ссылке.
Следует отметить, что строки является неизменными (при изменении строки создается совершенно новая строка), поэтому они не ведут себя как тип по ссылке. Любые изменения строки, сделанные по ссылке не затронут ее оригинал.
Для передачи значения переменной по ссылке используется ключевое слово ref. Если в метод передается параметр, а аргумент метода помечен как ref, то любое изменение переменной, сделанное методом, вызовет соответствующие изменения оригинальной переменной.
public static void Main(string[] args) { int I = 0; int[] Ints = { 0, 1, 2, 3 }; // отобразим первоначальное значение Console.WriteLine("I = " + I); Console.WriteLine("Ints[0]= " + Ints[0]); Console.WriteLine("Вызиваем функцию ..."); // Масив Ints передается как тип по ссылке поэтому он измениться // переменная I передается по значению поэтому вн. фун. создается ее копия SomeFunction(Ints, I); Console.WriteLine("I = " + I); Console.WriteLine("Ints[0]= " + Ints[0]); }
Ключевое слово ref должно указываться при вызове метода.
public static void SameFunction(int[] Ints, ref int i) { Ints[0] = 100; i = 100; } … SameFunction(Ints, ref i);
Если аргумент метода предварен ключевым словом out, то в этот метод может быть передана, которая не была инициализирована начальным значением. Переменная передается по ссылке, так что все изменения этой переменной, произведенные методом, останутся. Ключевое слово out должно указывать и при определении метода, и при его вызове.
Передача аргументов в Main
Если в коде будет две точки входа (две функции Main) компилятору можно указать какую именно нужно использовать: csc /main:Wrox.Professional.Chapter03.NamespaceExample MainExample.cs).
public static void Main(string[] args) { for (int i = 0; i < args.Length; i++) { Console.WriteLine(args[i]); } }