class Program
{
static void Add(double a, double b, out double s)
{
s = a + b;
}
static void Main(string[] args)
{
double a, b, s;
a = Convert.ToInt32(Console.ReadLine());
b = Convert.ToInt32(Console.ReadLine());
Add(a, b, out s); // a - ref, b - ref, s - out
Console.WriteLine(" Result "+s);
Console.ReadKey();
}
}
Правильное ли мое утверждение в этом коде, что a,b - ref по дефолту в CLR ?
Ключевое слово ref используется для передачи аргумента по ссылке, а не по значению.(источник)
Эффект передачи по ссылке в том, что все изменения вызываемого метода отражаются на значении переменной аргумента, используемой в вызове метода. Например если вызывающий объект передает выражение локальной переменной или выражение доступа к элементу массива и вызванный метод заменяет объект, на который ссылается параметр ref, то локальная переменная или элемент массива взывающего объекта теперь ссылаться на новый объект.
static void Add
значение, а не ссылку на это значение. ref
- то переменная будет менять своё значение (если к ней что-то добавите/отнимите и т.д.). int a = 1;
a = a*5+9; // a=14;
ref
- то, "значение" будет меняться по ссылкеstatic void Method(ref int i)
{
i = i + 30;
}
static void Main()
{
int val = 1;
Method(ref val);
Console.WriteLine(val);
// Output: 31
}