Объявления объекта C#

Есть ли любые издержки к использованию следующего sytax:

Form1 myForm = new Form1();
myForm.Show();

В противоположность:

Form1 myForm;
myForm = new Form1();
myForm.Show();

То, когда я изучал VB6, мне сказали, делая quivelent в VB, имело издержки - действительно ли то же верно в.NET?

5
задан IsmailS 8 March 2011 в 10:05
поделиться

6 ответов

Нет разницы в .Net.

Но в VB6 As New было зло. Он имел особое значение : он создавал автоматически создаваемую переменную. Вы никогда не сможете получить исключение с нулевой ссылкой с этими переменными. Среда выполнения VB6 автоматически создаст для вас новый экземпляр объекта.

Dim x As New Foo
x.Bar = 10      ' creates a new Foo '
Set x = Nothing ' destroys the first Foo'
x.Bar = 20      ' NO ERROR - creates a second Foo '

Такое поведение считалось злом большинством здравомыслящих программистов: и мы избегали как нового , как чумы.

Но в VB.Net (и C #) нет разницы между Dim x As New Foo и Dim x As Foo: Set x = New Foo

5
ответ дан 18 December 2019 в 14:43
поделиться

В этом примере вы создаете переменную [myForm ] типа Form1 и выделить ему память при создании.

Form1 myForm = new Form1(); 

В этом примере первая строка создает переменную типа Form1, но для этого объекта myForm не выделена память.

Form1 myForm;   

Затем вторую строку можно использовать всякий раз, когда вам нужен новый экземпляр типа Form1 [в этот момент память будет выделена для объекта myForm].

myForm = new Form1(); 

На мой взгляд, это действительно хорошая практика - объявлять все свои переменные для этих типов, а затем, когда вам нужен живой экземпляр, вы можете сделать свой ... obj = new Foo1 ();

{{1 }}
0
ответ дан 18 December 2019 в 14:43
поделиться

Результирующий байт-код при компиляции в режиме выпуска (и, вероятно, в режиме отладки) будет таким же.

2
ответ дан 18 December 2019 в 14:43
поделиться

Вы только в последнем случае отделили объявление от экземпляра. Существенного влияния это не оказывает. Я где-то читал, что создание экземпляра объекта .Net занимает 0,000007 секунды, поэтому это вряд ли имеет значение, хотя рекомендуется создавать экземпляр объекта только тогда, когда это необходимо, и удалять, когда он не нужен или кеширование не требуется ..

1
ответ дан 18 December 2019 в 14:43
поделиться

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

0
ответ дан 18 December 2019 в 14:43
поделиться

Нет. Оба одинаковы.

5
ответ дан 18 December 2019 в 14:43
поделиться