c # создание объекта - PullRequest
       34

c # создание объекта

3 голосов
/ 28 апреля 2010

В чем разница между:

Object o = new Object();
o.foo();

и

new Object().foo();

(при условии, что мне впоследствии не нужна ссылка)?

Есть ли причины для использованияодин вместо другого (например, использование памяти)?

Ответы [ 5 ]

8 голосов
/ 28 апреля 2010

Нет никакой разницы с точки зрения исполнения.

Там может быть разница с точки зрения отладки:

  • Может быть удобно разбить после создания объекта, но до того, как foo() будет вызван
  • Может быть полезно иметь возможность проверять значение переменной впоследствии
  • Если выдается исключение, разделение вызовов на несколько строк может сделать источник более понятным. (Я не думаю, что это будет проблемой в данном конкретном случае, но для NullReferenceException s, в частности, может быть сложно, если в одном и том же операторе есть несколько операций разыменования).

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

6 голосов
/ 28 апреля 2010

Нет разницы, если вам не нужен экземпляр потом.

2 голосов
/ 28 апреля 2010

Если вам не нужны o послесловия, тогда нет никакой разницы.
Компилятор (JIT), вероятно, будет рассматривать их как одинаковые.

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

0 голосов
/ 28 апреля 2010

РЕДАКТИРОВАТЬ: Удален неправильный код

Разница в том, что в первом случае вы видите объект, создаваемый в отладчике.

0 голосов
/ 28 апреля 2010

Без разницы.

Чтобы проверить это, вы можете скомпилировать оба кода (режим выпуска), проверить их с помощью ildasm, и вы увидите, что полученный байт-код будет одинаковым.

РЕДАКТИРОВАТЬ: на самом деле, иногда мне легче отлаживать, когда переменная объявлена. Проще проверять, а значит легче отлаживать.

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