Есть ли причина не использовать одноразовые объекты над явно объявленными - PullRequest
1 голос
/ 16 сентября 2011

В последнее время я трачу много времени на то, чтобы все мои объекты имели имена, которые позволили бы легко определить их значение.Я также обнаружил, что вы можете использовать объекты одноразовым способом, например так:

_ProfileList = (New RegistryManager).GetAllProfiles()

В отличие от создания именованного объекта.

Есть ли причина не делать это, когда всеВы хотите одноразовый доступ к объекту?Если кто-то знает плюсы и минусы, это было бы здорово.

PS: Это код VB.NET, но он или C # подойдет, если предоставить примеры

Ответы [ 2 ]

1 голос
/ 16 сентября 2011

То, что является явным - оно просто не сохраняется в переменной (действительно, объект никогда не имеет "имени" - только локальные переменные / поля имеют имена). Если вам не нужен объект более одного раза, и это не делает ядро ​​более сложным, то в этом нет реального недостатка. Обратите внимание, что если объект IDisposable или похожий, вам понадобится локальный, то есть

using(var manager = new RegistryManager()) {
     _ProfileList = manager.GetAllProfiles();
}

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

var manager = new RegistryManager();
_ProfileList = manager .GetAllProfiles();

и

_ProfileList = (new RegistryManager()).GetAllProfiles();

идентичны (мое ожидание).

1 голос
/ 16 сентября 2011

Объекты не имеют имен - переменные имеют.

Совершенно нормально создавать объект и использовать его исключительно в другом выражении - хотя я бы сказал, что что-то вроде RegistryManager звучит так, как будто это передаваемая зависимость, а не что-то создано в коде, как это. Это усложнит тестирование.

Лучшим примером того, где это хорошо, будет StringBuilder:

string text = new StringBuilder().Append("Foo")
                                 .Append(name)
                                 .DoOtherAppending()
                                 .ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...