В чем разница между этими двумя методами инициализации для члена класса в VB.Net? - PullRequest
3 голосов
/ 04 ноября 2011

В чем разница между этими двумя методами инициализации для obj? Я видел оба из них, но знаю, знаю, есть ли подходящее время, чтобы использовать один против другого. Я нашел этот пост , который охватывает C #, но не уверен, относится ли это к VB.Net.

Public Class Class1
   Sub New()
   End Sub

   Dim obj As New Object
End Class

против

Public Class Class1
   Sub New()
      obj=New Object
   End Sub

   Dim obj As Object
End Class

Заранее извиняюсь, если это дубликат.

Ответы [ 3 ]

7 голосов
/ 04 ноября 2011

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

В этом случае встроенная инициализация (Dim obj As New Object) будет происходить перед любым кодом внутри конструктора. Размещение инициализации в конструкторе позволяет выбрать порядок инициализации.

2 голосов
/ 04 ноября 2011

Практически ничто не отличается от этих образцов.В обоих случаях вы получите следующий порядок операций

  • Конструктор для Class1 называется
  • Базовый конструктор (в данном случае Object) называется
  • Поле obj присваивается значение

Во всех возможных случаях это приводит к генерированию идентичного IL.

1 голос
/ 04 ноября 2011

Ваша первая версия "декларативная".Преимущества этого:

  1. Проще увидеть, как поле инициализируется, так как вам не нужно искать его в конструкторе.
  2. Если у вас несколькоконструкторы, вам не нужно повторяться.

Ваша первая версия "императив".Его преимущества:

  1. Вы точно контролируете, когда он создается.
  2. Вы можете иметь разные версии для каждого конструктора.

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

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