В чем разница между следующими случаями? - PullRequest
0 голосов
/ 31 октября 2018

код в C #

Дело 1

var p = new Person();
p = getPerson(p); 

Дело 2

var p = new Person();
getPerson(p);

В приведенных выше случаях, будет ли в любом случае потребляться дополнительная память?

1 Ответ

0 голосов
/ 31 октября 2018

Предполагая, что getPerson просто изменяет свойства Person, и есть 2 различных метода, один из которых возвращает человека, а другой - недействительный, в этом коде нет заметной разницы

static void Main(string[] args)
{

   // example 1
   var p = new Person();
   p = getPerson1(p);

   // example 2
   var p2 = new Person();
   getPerson2(p2);
}

Пример 1

IL_0001: newobj       instance void ConsoleApp8.Person::.ctor()
IL_0006: stloc.0      // p

// [33 10 - 33 28]
IL_0007: ldloc.0      // p
IL_0008: call         class ConsoleApp8.Person ConsoleApp8.Program::getPerson1(class ConsoleApp8.Person)
IL_000d: stloc.0      // p

Пример 2

IL_000e: newobj       instance void ConsoleApp8.Person::.ctor()
IL_0013: stloc.1      // p2

// [36 4 - 36 19]
IL_0014: ldloc.1      // p2
IL_0015: call         void ConsoleApp8.Program::getPerson2(class ConsoleApp8.Person)
IL_001a: nop          

Поле OpCodes.Stloc

Извлекает текущее значение из верхней части стека оценки и сохраняет это в списке локальных переменных по указанному индексу.

OpCodes.Nop Field

Заполняет пространство, если исправлены коды операций. Нет значимой операции выполняется, хотя цикл обработки можно использовать.


Короче, беспокойся о других вещах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...