Правда ли, что используется «это»? прежде чем параметры в C # использует больше памяти? - PullRequest
2 голосов
/ 09 декабря 2008

чем просто вызвать параметр как есть?

Ответы [ 4 ]

27 голосов
/ 09 декабря 2008

Если вы имеете в виду поля, то нет. Компилятор вводит «this» ( ldarg.0 ) независимо от того, используете ли вы его явно (this.foo) или неявно (foo).

Однако в вашем исходном коде требуется еще 5 символов ... так что на вашем жестком диске разработки будет горстка байтов. Это будет иметь абсолютно нулевую разницу в скомпилированном IL или во время выполнения.

Есть два сценария, где использование «this» меняет вещи:

  • когда существует переменная / параметр с тем же именем (this.foo = foo;)
  • при разрешении методов расширения (this.SomeMethod();)
1 голос
/ 09 декабря 2008

Ваш вопрос слишком двусмысленный, чтобы ответить однозначно, но я бы все равно начал с громкого Нет

тогда я бы хотел знать, что именно вы имеете в виду под параметром? Я обычно интерпретировал бы это как «аргумент метода», но они не привязаны к «этому» в рамках, так что вы, вероятно, имели в виду «члены», такие как поля, свойства и / или методы.

Если все мои предположения о том, как интерпретировать ваш вопрос, верны, я поддерживаю свое прежнее «Нет».

Но я хотел бы знать, откуда у вас эта идея.

0 голосов
/ 09 декабря 2008

Полагаю, вы имеете в виду перед именем переменной? Я не понимаю, почему бы использовать больше памяти. CLR должен оптимизировать любой синтаксис для ссылки на переменную таким образом, чтобы он не влиял на производительность (после проверки он добавит this ...). Так что нет, это не так.

0 голосов
/ 09 декабря 2008

Я не знаю, использует ли он больше памяти, но я так не думаю, это всего лишь четкая ссылка, то, что компилятор сделал бы и под капотом.

...