Учитывая приведенные ниже настройки и фрагменты кода, какие причины вы можете придумать для использования одного вместо другого? У меня есть пара аргументов, использующих любой из них, но мне любопытно, что думают другие.

Настроить

public class Foo
{
    public void Bar()
    {
    }
}

Первый фрагмент

var foo = new Foo();
foo.Bar();

Фрагмент два

new Foo().Bar();
0
Ty. 4 Июл 2009 в 01:50

5 ответов

Лучший ответ

Первая версия означает, что вы можете легче проверить foo в отладчике перед вызовом Bar().

Первая версия также означает, что вы связываете имя с объектом (на самом деле это, конечно, имя переменной, но явно существует мысленная ассоциация), что иногда может быть полезно:

var customersWithBadDebt = (some big long expression)
customersWithBadDebt.HitWithBaseballBat();

Яснее, чем

(some big long expression).HitWithBaseballBat();

Если ни одна из этих причин не подходит, конечно, не стесняйтесь выбирать однострочную версию. Это личный вкус, который затем применяется к каждому конкретному контексту.

9
Jon Skeet 3 Июл 2009 в 21:55

Если вы не собираетесь использовать экземпляр Foo для чего-то большего, чем просто выполнение этого вызова, я бы, вероятно, выбрал второй, но я не вижу, что должно быть какое-либо практическое различие, если только вызов не происходит очень часто (но это действительно так. не кажется мне очень вероятным с этой конструкцией).

3
Fredrik Mörk 3 Июл 2009 в 21:51

Я бы предпочел второй вариант, поскольку он дает понять, что мне вообще не нужна ссылка на объект.

0
flq 3 Июл 2009 в 21:54

Я бы поставил под сомнение ваши мотивы использования этого метода в качестве экземпляра. Если бы я только обновил объект, чтобы вызвать для него один метод, а затем отбросить его, статический метод с зависимостями классов в качестве параметров должен был бы стать подходящим вариантом (хотя я презираю статику).

Что приводит к более интересной проблеме: если вы вообще не полагаетесь на внутреннее состояние, то вы всего лишь функция, и поэтому я бы сказал, что вы принадлежите какой-то сущности, а не своему собственному классу.

0
Tigraine 3 Июл 2009 в 21:54

Я бы выбрал фрагмент номер один.

Если у вас будет класс Foo do Bar (), то Bar2 () будет проще.

Кроме того, его легче отлаживать, потому что вы можете смотреть foo, что вы не можете с фрагментом 2

0
Eric 3 Июл 2009 в 21:56