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 инициализировано нулём).
Разбор вызовов:
-
MethodA(myClassObj.Num);— передаётся значениеint(0) по значению, внутри метода увеличивается локальная копия, оригинал не меняется. -
MethodB(myStructObj);— структура передаётся по значению, внутри метода изменяется копия, оригинал не меняется. -
MethodC(myClassObj);— передаётся ссылка на объект, внутри метода полеNumувеличивается на 1, оригинальный объект изменяется. -
MethodD(myClassObj);— параметрmyClass— локальная копия ссылки, внутри метода ссылка переназначается на новый объект, но это не влияет на внешний объект.
Итог:
myClassObj.Numувеличился на 1 вMethodC.myStructObj.Numостался 0.
Вывод в консоль:
1
0