Recientemente descubrí los usos de las variables locales estáticas en VB.NET y me pregunté sobre su posible uso en las propiedades de carga diferida.Uso de variables locales estáticas en la propiedad de carga diferida en VB.NET
Considere el siguiente código de ejemplo.
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
Esta sería una propiedad de carga diferida habitual y simplificada. Puede que quiera usar la Clase Lazy genérica para obtener (hasta donde yo sepa) el mismo comportamiento.
Ahora, veamos la propiedad mientras usamos una variable estática.
Public Class Bar
Public ReadOnly Property FooImplementation As IFoo
Get
Static _fooImplementation as IFoo = New Foo
Return _fooImplementation
End Get
End Property
End Class
Por lo que yo puedo ver, esto tiene algunas ventajas con respecto a la puesta en práctica habitual, primaria su incapacidad de acceder a la variable fuera de la propiedad, así como no tener que utilizar una variable adicional.
Mi pregunta es: ¿Cuál de esas es la forma "correcta" de hacerlo? Sé que las variables estáticas tienen una sobrecarga adicional, pero ¿es lo suficientemente malo como para crear, en mi opinión personal, un código más poco claro que pueda ser mal utilizado más fácilmente? ¿Cuánto rendimiento pierde en comparación con el método "tradicional"? ¿Cómo es importante para las clases pequeñas en comparación con las grandes fábricas?
Gracias de antemano.
+1 De acuerdo, especialmente después de ver lo que genera estática. – tcarvin
Para referencia de otros, [aquí hay otra respuesta] (http://stackoverflow.com/a/12202349/4889167) de Hans Passant que entra en más detalles. –