Я прилагаю усилия к методам C#. Существует три способа передачи параметров в методы C#.В чем разница между передачей параметров по выходу и по ссылке в C#
Параметры значений: Этот метод копирует фактическое значение аргумента в формальный параметр функции. В этом случае изменения, внесенные в параметр внутри функции, не влияют на аргумент.
Ссылочные параметры: Этот метод копирует ссылки на ячейку памяти аргумента в формальный параметр. Это означает, что изменения, внесенные в параметр, влияют на аргумент.
Выходные параметры: Этот метод помогает вернуть более одного значения.
Я понял выше типы параметров прохождения с помощью нижеприведенных примеров кода.
using System;
namespace PassingParameterByReference
{
class MethodWithReferenceParameters
{
public void swap(ref int x)
{
int temp = 5;
x = temp;
}
static void Main(string[] args)
{
MethodWithReferenceParameters n = new MethodWithReferenceParameters();
/* local variable definition */
int a = 100;
Console.WriteLine("Before swap, value of a : {0}", a);
/* calling a function to swap the value*/
n.swap(ref a);
Console.WriteLine("After swap, value of a : {0}", a);
Console.ReadLine();
}
}
}
Если приведенный выше код компилируется и выполняется, то получается следующий результат:
Перед своп, значение а: 100
После обмена, значение а: 5
С помощью этих кодов я мог понять, как передавать параметры методам по ссылке. И затем я рассматриваю ниже код, чтобы понять параметры передачи методам вывода.
using System;
namespace PassingParameterByOutput
{
class MethodWithOutputParameters
{
public void swap(out int x)
{
int temp = 5;
x = temp;
}
static void Main(string[] args)
{
MethodWithOutputParameters n = new MethodWithOutputParameters();
/* local variable definition */
int a = 100;
Console.WriteLine("Before swap, value of a : {0}", a);
/* calling a function to swap the value */
n.swap(out a);
Console.WriteLine("After swap, value of a : {0}", a);
Console.ReadLine();
}
}
}
Если приведенный выше код компилируется и выполняется, то получается следующий результат:
Перед своп, значение а: 100
После обмена, значение а: 5
Эти образцы кода выполняют одно и то же действие различными способами. И я не могу понять разницу между двумя подходами. (Передача параметров в метод по выводам и по ссылке). Выход двух примеров одинаковый. Какая разница?
[Параметр переходящая в C#] (http://www.yoda.arachsys.com/csharp/parameters.html) – Steve
полезный вопрос. http://stackoverflow.com/questions/1516876/when-to-use-ref-vs-out – George
Вы утверждаете, что второй пример компилируется и запускается, однако я получаю две ошибки компилятора. И в 'swap' об использовании непризнанных параметров x и y. –