Использование статических локальных переменных в свойстве отложенной загрузки в VB.NET

Я только недавно узнал об использовании статических локальных переменных в VB.NET и задумался об их потенциальном использовании в свойствах отложенной загрузки.

Рассмотрим следующий пример кода.

Public Class Foo
  Implements IFoo
End Class

Public Interface IFoo
End Interface

Public Class Bar

  Private _fooImplementation As IFoo
  Public ReadOnly Property FooImplementation As IFoo
    Get
      If _fooImplementation Is Nothing Then _fooImplementation = New Foo
      Return _fooImplementation
    End Get
  End Property
End Class

Это будет обычное упрощенное свойство отложенной загрузки. Возможно, вы даже захотите использовать общий класс Lazy Class, чтобы получить (насколько мне известно) такое же поведение.

Теперь давайте посмотрим на свойство при использовании статической переменной.

Public Class Bar

  Public ReadOnly Property FooImplementation As IFoo
    Get
      Static _fooImplementation as IFoo = New Foo
      Return _fooImplementation
    End Get
  End Property
End Class

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

Мой вопрос к вам: какой из этих способов является «правильным»? Я знаю, что статические переменные имеют дополнительные накладные расходы, но достаточно ли это плохо, чтобы создать, на мой личный взгляд, нечеткий код, который можно легко использовать неправильно? Насколько вы теряете производительность по сравнению с "традиционным" методом? Насколько это важно для маленьких классов по сравнению с огромными фабриками?

Заранее спасибо.

5
задан Lambda 19 September 2011 в 17:17
поделиться