Я только недавно узнал об использовании статических локальных переменных в 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
Насколько я понимаю, у этого есть несколько преимуществ по сравнению с обычной реализацией, в первую очередь ваша невозможность доступа к переменной вне свойства, а также отсутствие необходимости использовать дополнительную переменную.
Мой вопрос к вам: какой из этих способов является «правильным»? Я знаю, что статические переменные имеют дополнительные накладные расходы, но достаточно ли это плохо, чтобы создать, на мой личный взгляд, нечеткий код, который можно легко использовать неправильно? Насколько вы теряете производительность по сравнению с "традиционным" методом? Насколько это важно для маленьких классов по сравнению с огромными фабриками?
Заранее спасибо.