Я только недавно узнал об использовании статических локальных переменных в 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 для получения (насколько мне известно) того же поведения.
Теперь давайте посмотрим на свойство при использовании статической переменной.
Public Class Bar
Public ReadOnly Property FooImplementation As IFoo
Get
Static _fooImplementation as IFoo = New Foo
Return _fooImplementation
End Get
End Property
End Class
Насколько я вижу, это имеет несколько преимуществ по сравнению с обычной реализацией, в первую очередь это невозможность доступа к переменной за пределами свойства, а также отсутствие необходимости использовать дополнительную переменную.
Мой вопрос к вам: какой из них является «правильным» способом сделать это? Я знаю, что статические переменные имеют дополнительные издержки, но достаточно ли это плохо, чтобы, по моему личному мнению, создавать более неясный код, который легче использовать неправильно? Какую производительность вы теряете по сравнению с «традиционным» методом? Какое это имеет значение для небольших классов по сравнению с огромными фабриками?
Заранее спасибо.