class MyClass
{
// инициализируем поле 20.
public int Val = 20;
}
class Program
{
static void MyMethod(MyClass f1, int f2)
{
// Увеличиваем на 5 значение поля у ссылочного типа
f1.Val = f1.Val + 5;
// Увеличиваем на 5 значение у значимого типа
f2 = f2 + 5;
Console.WriteLine($"Окончание метода MyMethod(): f1.Val=={f1.Val}, f2=={f2}");
}
static void Main(string[] args)
{
//создаем ссылочный тип
MyClass a1 = new MyClass();
//создаем значимый тип
int a2 = 10;
Console.WriteLine($"До вызова метода MyMethod(): a1.Val=={a1.Val}, a2=={a2}");
//вызоваем метод
MyMethod(a1, a2);
Console.WriteLine($"После отработки метода MyMethod(): a1.Val=={a1.Val}, a2=={a2}");
Console.ReadLine();
}
}
class Program
{
static void MyMethod(MyClass f1)
{
f1.Val = 50;
Console.WriteLine($"После изменения значения в MyMethod(): { f1.Val }");
//здесь мы изменяем ссылку на др. экземпляр класса
f1 = new MyClass();
Console.WriteLine($"После присвоения нового экземпляра класса в MyMethod(): {f1.Val}");
}
static void Main(string[] args)
{
MyClass a1 = new MyClass();
Console.WriteLine($"До вызова метода MyMethod():{a1.Val}");
MyMethod(a1);
Console.WriteLine($"После отработки метода MyMethod(): {a1.Val}");
Console.ReadLine();
}
}
你可以考虑这个例子
这项工作的结果
同时发生的事情
Стеке和Куче这样的插图将有助于理解示例和插图取自Illustrated C# 7
PS对于通过引用传递参数的情况,我们将上例中的方法改成如下
他的电话是这样的
结论
如下
。
现在让我们像这样更改示例
这项工作的结果是
正在发生的事情的一个例证

现在让我们再次改变方法
和他的挑战
这项工作的结果就是
对正在发生的事情的一个说明。
这里,所有可能的情况都得到了证明。