Способы передачи аргументов методу

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

--вызов по ссылке-- В данном случае параметру метода передается ссылка на аргумент, а не значение аргумента. Это означает, что изменения, вносимые в параметр, будут оказывать влияние на аргумент, используемый для вызова метода.

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

//передача аргументов обычных типов по значению.

using System;

class Test

{

int c, d;

/*этот метод не оказывает никаноко влияния на

аргументы, используемые для его вызова. */

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("a и b до вызова: {0} {1}", a, b);

ob.NoChange(a, b);

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

}

}

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

//передача обьектов по ссылке.

using System;

class Test

{

public int a, b;

public Test(int i, int j)

{

a = i;

b = j;

}

/* Передать объект. Теперь переменные ob.а и ob.b из объекта,

используемого в вызове метода, будут изменены. */

public void Change(Test ob)

{

ob.a = ob.a + ob.b;

ob.b = -ob.b;

}

}

class CallByRef

{

static void Main()

{

Test ob = new Test(15, 20);

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

ob.Change(ob);

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

}

}

Использование модификаторов параметров ref и out

Как пояснялось выше, аргументы простых типов, например intили char, передаются методу по значению. Это означает, что изменения, вносимые в параметр, принимающий значение, не будут оказывать никакого влияния на аргумент, используемый для вызова. Но такое поведение можно изменить, используя ключевые слова refи out для передачи значений обычных типов по ссылке. Это позволяет изменить в самом методе аргумент, указываемый при его вызове.

Причины, по которым значение простого типа иногда требуется пе­

редавать по ссылке. В общем, для этого существуют две причины:

Разрешить методу изменить содержимое его аргументов


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: