Sobes.tech
Back to questions
Middle+
7

Что будет выведено в консоль? ```csharp public class Program { static void Main() { var myClassObj = new MyClass(); var myStructObj = new MyStruct(); MethodA(myClassObj.Num); // MethodB(myStructObj); MethodC(myClassObj); MethodD(myClassObj); Console.WriteLine(myClassObj.Num); // ? Console.WriteLine(myStructObj.Num); // ? } private static void MethodA(int num) { num = num + 1; } private static void MethodB(MyStruct myStruct) { myStruct.Num += 1; } private static void MethodC(MyClass myClass) { myClass.Num += 1; } private static void MethodD(MyClass myClass) { myClass = new MyClass(); } } ```

Companies where asked
Core outstaff

Answer from AI

sobes.tech AI

В данном коде:

  • MyClass — ссылочный тип (class), MyStruct — значимый тип (struct).
  • myClassObj.Num и myStructObj.Num изначально равны 0 (предполагается, что поле Num инициализировано нулём).

Разбор вызовов:

  1. MethodA(myClassObj.Num); — передаётся значение int (0) по значению, внутри метода увеличивается локальная копия, оригинал не меняется.

  2. MethodB(myStructObj); — структура передаётся по значению, внутри метода изменяется копия, оригинал не меняется.

  3. MethodC(myClassObj); — передаётся ссылка на объект, внутри метода поле Num увеличивается на 1, оригинальный объект изменяется.

  4. MethodD(myClassObj); — параметр myClass — локальная копия ссылки, внутри метода ссылка переназначается на новый объект, но это не влияет на внешний объект.

Итог:

  • myClassObj.Num увеличился на 1 в MethodC.
  • myStructObj.Num остался 0.

Вывод в консоль:

1
0