我最近刚刚了解了 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
据我所知,这比通常的实现有一些优点,主要是您无法访问属性外部的变量,并且不必使用额外的变量。
我向您提出的问题是:哪一个是“正确”的做法?我知道静态变量有额外的开销,但在我个人看来,创建更不清晰、更容易被滥用的代码是否足够糟糕?与“传统”方法相比,您的性能损失了多少?与大型工厂相比,小班教学有何重要意义?
提前致谢。
The Static关键字有相当大的开销,编译器会生成一大块 IL 来实现它。什么does您的第一个代码片段没有做的事情是确保线程不会导致问题。如果这不是问题那么你的第一个片段是lot更便宜。不仅因为它的 IL 少得多,还因为它将被内联。带有 Static 的 getter 永远不会被内联,因为它包含 Try/Finally 代码。
如果您的目标是 .NET 4,那么您绝对应该看看 Lazy(Of T) 类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)