Первым способом являетсявызов по значению.В этом случае значение аргумента копируется в формальный параметр метода. Следовательно, изменения, вносимые в параметр метода, не оказывают никакого влияния на аргумент, используемый для вызова. А вторым способом передачи аргумента являетсявызов по ссылке.В данном случае параметру метода передается ссылка на аргумент, а не значение аргумента. В методе этассылкаиспользуется для доступа к конкретному аргументу, указываемому при вызове. Это означает, что изменения, вносимые в параметр, будут оказывать влияние на аргумент, используемый для вызова метода.

По умолчанию в C# используется вызов по значению, а это означает, что копия аргумента создается и затем передается принимающему параметру. Следовательно, при передаче значения обычного типа, напримерintилиdouble,все, что происходит с параметром, принимающим аргумент, не оказывает никакого влияния за пределами метода. В качестве примера рассмотрим следующую программу.

// Передача аргументов обычных типов по значению, using System;

class Test {

/* Этот метод не оказывает никакого влияния на аргументы, используемые для его вызова. */ public void NoChange(int i, int j) {

i = i + j; j = -j;

}

}

class CallByValue {

static void Main() {

Test ob = new Test();

int a = 15, b = 20;

Console.WriteLine("а и b до вызова: " + a + " " + b) ;

ob.NoChange(a, b);

Console.WriteLine("а и b после вызова: " + a + " " + b) ;

}

}

Вот какой результат дает выполнение этой программы.

а и b до вызова: 15 2 0 а и b после вызова: 15 2 0

Как видите, операции, выполняемые в методеNoChange (), не оказывают никакого влияния на значения аргументов а и Ь, используемых для вызова данного метода. Это опять же объясняется тем, что параметрам i и j переданы копии значений аргументов а и Ь, а сами аргументы а и b совершенно не зависят от параметров i и j. В частности, присваивание параметруiнового значения не будет оказывать никакого влияния на аргумент а.

Перейти на страницу:

Похожие книги